我创建了一个交互式报告。我想基于每条记录可用的列链接执行PL / SQL。例如,该报告包含flight_ID和departure_date列。当用户单击该记录上存在的链接时,使用PL / SQL我想更新/插入到另一个表中,其中包含上述2个列中的当前记录中可用的详细信息。我怎样才能做到这一点?请帮忙。 我有一个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中做到这一点。
答案 0 :(得分:2)
您可以使用以下网址定义链接:
apex.submit('INSERTSEATS_#FLIGHT_ID#_#DEPARTURE_DATE_STR#');
报告中的 #FLIGHT_ID#
和#DEPARTURE_DATE_STR#
引用列别名。列DEPARTURE_DATE_STR
是以某种特定方式格式化的出发日期,例如YYYYMMDD。
这将提交页面,其请求值类似于&#34; INSERTSEATS_123_20151231&#34;。
然后,您可以创建在:request like 'INSERTSEATS%'
(PL / SQL条件)时触发的提交时页面进程。
此过程需要做的第一件事是解析请求值以找出航班ID和出发日期。您可以使用函数apex_util.string_to_table(:request,'_')
将请求字符串拆分为3个元素的数组,即字符串&#39; INSERTSEATS&#39;,航班ID,例如&#39; 123&#39;和出发日期,例如&#39; 20151231&#39;
最后,您可以使用在insert语句中获取的航班ID和出发日期值(首先将日期字符串转换回date
值。)
@Drumbeg在评论中指出,您还可以通过apex.submit
设置页面项。因此,您的链接可以定义为:
apex.submit
({request:"INSERTSEATS",
set:{"P1_FLIGHT_ID":#FLIGHT_ID#,
"P1_DEPARTURE_DATE_STR":#DEPARTURE_DATE_STR#}
});
您的提交过程将具有条件Request = INSERTSEATS,并将使用insert语句中的页面项的值。
答案 1 :(得分:0)
这是我过去使用的异步方法。
首先,您需要一些支持变量的页面项。
现在更改列链接,以便触发自定义事件并传递所需的报告行数据。
javascript:$('body').trigger('INSERT_SEATS', {flightId:"#FLIGHT_ID#", departureDate:"#DEPARTURE_DATE_STR#"});
现在根据自定义事件创建动态操作。
此动态操作应该有两个TRUE操作:
JavaScript Action(用于设置包含触发器数据的临时页面项,请注意this
指的是事件本身。数据包含在事件中)。
$s('PXXX_FLIGHT_ID', this.data.flightId);
$s('PXXX_DEPARTURE_DATE', this.data.departureDate);
PL / SQL操作(参考页面项目并执行DML)。
提醒(可选,但我通常会提醒用户该操作已完成)。
您不必将自定义事件附加到body
。它可以附加到页面上的任何DOM节点。因此,例如,如果您的报告区域的静态ID为flightReport
,则可以执行$('#flightReport').trigger('INSERT_SEATS', .....)