Oracle apex 我已经创建了一个交互式报告。我想基于每个记录可用的列链接执行PL/SQL

Oracle apex 我已经创建了一个交互式报告。我想基于每个记录可用的列链接执行PL/SQL,oracle-apex,Oracle Apex,我已经创建了一个交互式报告。我想基于每个记录可用的列链接执行PL/SQL。例如,该报告具有航班ID和起飞日期列。当用户单击该记录上的链接时,我希望使用PL/SQL更新/插入到另一个表中,并在上面提到的两列下显示当前记录中可用的详细信息。我怎样才能做到这一点?请帮忙。 我有一个plsql块 BEGIN INSERT INTO flight_seats WITH seats AS (SELECT rownum r FROM dual CONNECT BY LEVEL

我已经创建了一个交互式报告。我想基于每个记录可用的列链接执行PL/SQL。例如,该报告具有航班ID和起飞日期列。当用户单击该记录上的链接时,我希望使用PL/SQL更新/插入到另一个表中,并在上面提到的两列下显示当前记录中可用的详细信息。我怎样才能做到这一点?请帮忙。 我有一个plsql块

BEGIN
   INSERT INTO flight_seats
      WITH seats AS
       (SELECT rownum r FROM dual CONNECT BY LEVEL <= 350)
      SELECT flight_shedule.flight_id,
             flight_shedule.departure_date,
             r seat,
             CASE
                WHEN r BETWEEN start_a AND end_a THEN
                 'A'
                WHEN r BETWEEN start_b AND end_b THEN
                 'B'
                WHEN r BETWEEN start_c AND end_c THEN
                 'C'
             END CLASS,
             900 fare,
             'o' status
        FROM seats, airplane, flight_shedule
       WHERE flight_shedule.airplane_id = airplane.airplane_id;
END;

如何在oracle apex中执行此操作。

您可以使用如下URL定义链接:

apex.submit('INSERTSEATS_#FLIGHT_ID#_#DEPARTURE_DATE_STR#');
报告中的航班号和起飞日期参考列别名。列出发日期是以某种特定方式格式化的出发日期,例如YYYYMMDD

这将提交带有请求值的页面,如INSERTSEATS_123_20151231

然后,您可以创建一个在提交页面上的进程,该进程在以下情况下触发:请求,如“INSERTSEATS%”PL/SQL条件

这个过程需要做的第一件事是解析请求值,找出航班ID和起飞日期。您可以使用functionpex_util.string_to_table:request,''将请求字符串拆分为3个元素的数组,即字符串'INSERTSEATS',航班ID如'123',起飞日期如'20151231'

最后,您可以使用insert语句中获得的航班ID和起飞日期值,首先将日期字符串转换回日期值

使现代化 @Drumberg在评论中指出,您也可以通过apex.submit设置页面项。因此,您的链接可以定义为:

apex.submit
  ({request:"INSERTSEATS", 
    set:{"P1_FLIGHT_ID":#FLIGHT_ID#, 
         "P1_DEPARTURE_DATE_STR":#DEPARTURE_DATE_STR#}
  });

然后,提交过程的条件Request=INSERTSEATS,并使用insert语句中页面项的值。

这里是我过去使用过的异步方法

首先,您需要一些支持变量的页面项

PXXX_出发日期_ PXXX_航班号 现在更改列链接,使其触发自定义事件并传递所需的报告行数据

javascript:$('body').trigger('INSERT_SEATS', {flightId:"#FLIGHT_ID#", departureDate:"#DEPARTURE_DATE_STR#"});
现在,基于自定义事件创建动态操作

事件:自定义 定制活动:插入座位 选择类型:jQuery选择器 jQuery选择器:主体 此动态动作应有两个真实动作:

用于使用触发器中的数据设置临时页面项的JavaScript操作,请注意,这指的是事件本身。数据包含在事件中

$s('PXXX_FLIGHT_ID', this.data.flightId);
$s('PXXX_DEPARTURE_DATE', this.data.departureDate);
PL/SQL操作引用页面项并执行DML

警报是可选的,但我通常会提醒用户操作已完成


您不必将自定义事件附加到主体。它可以附加到页面上的任何DOM节点。因此,例如,如果您的报告区域有一个flightReport的静态ID,那么您可以执行$'flightReport'。触发'INSERT_SEATS',…。

我想也可以使用apex.submit设置页面项。这将节省拆分请求字符串的时间。不过方法不错。