Oracle Apex:PL/SQL 块中的 Javascript 代码
Posted
技术标签:
【中文标题】Oracle Apex:PL/SQL 块中的 Javascript 代码【英文标题】:Oracle Apex: Javascript code in PL/SQL Block 【发布时间】:2016-03-19 17:15:53 【问题描述】:是否可以在 PL/SQL 块中包含 javascript 代码。 我想在 oracle Apex 页面进程中提交时执行包含 JavaScript 代码的 pl/sql 块。
DECLARE
v_count NUMBER;
BEGIN
select count(*) into v_count
from summary
where prd_items = 'Total';
HTP.p ('<script type="text/javascript">');
HTP.p ( 'alert(''The value of Total for BU is ' ||v_count|| '.\n'
|| 'You have to enter correct values to proceed further \n'');');
HTP.p ('</script>');
END;
我的页面区域中有Submit
按钮,这个pl/sql 块是页面处理项并在页面提交时执行(Conditional:Submit
)。
但我无法弹出警告框。请指教。
谢谢。
【问题讨论】:
这段代码是在哪里定义的?您的 JavaScript 将作为对服务器的异步请求的结果返回,但您还需要将其插入到您的页面中才能执行。 浏览器控制台是否出现错误? this 有帮助吗? 不,我没有收到任何错误,我的代码是提交后页面处理的一部分。 【参考方案1】:是的是否可以在 PL/SQL 块中包含 JavaScript 代码?
但是,您尝试执行的操作是在提交后传递 javascript 函数。它只有在您将执行点更改为 AFTER HEADER 时才有效。
或者,如果您只想验证输入的值并且不想使用顶点验证,您可以使用 APEX_ERROR 包。试试这个。
DECLARE
v_count NUMBER;
BEGIN
select prd_items into v_count
from summary
where prd_items = 'Total';
-- I dont really know what you want to
--accomplish with this query but Im pretty sure
--It will not return a number
-- if you want to count the number of prd_items it should be like this
--select COUNT(*)
--into v_count
--from summary
--where prd_items = 'Total';
APEX_ERROR.ADD_ERROR(
p_message => 'The value of Total for BU is '||v_count||'.<br>'||
'You have to enter correct values to proceed further',
p_display_location => apex_error.c_inline_in_notification
);
END;
编辑:如果您想在计数不等于 100 时显示错误,请执行以下操作:
DECLARE
v_count NUMBER;
BEGIN
Select COUNT(*)
into v_count
from summary
where prd_items = 'Total';
IF v_count != 100 THEN
APEX_ERROR.ADD_ERROR(
p_message => 'The value of Total for BU is '||v_count||'.<br>'||
'You have to enter correct values to proceed further',
p_display_location => apex_error.c_inline_in_notification
);
END IF;
END;
【讨论】:
我试过这个,但错误警报弹出消息显示正确和错误的值。我只想在 count 不是 100 时发出警报。 这就是IF statement
应该进入的地方。如果你已经阅读了我对代码的评论,你应该将你的查询更改为我写的内容并添加一个 if 语句【参考方案2】:
要从 pl/sql 过程嵌入 javascript 代码,您必须将该过程放在“Before Header”点。但我认为这不是您想要实现的最佳解决方案。
您要做的是添加验证权吗?如果是这样,为什么不使用顶点验证。使用如下选项创建验证:
-
确定验证级别:页面项
确定要验证的页面项目:选择所需的项目。
选择验证类型:PL/SQL
选择您要创建的验证类型:返回错误文本的函数
验证码:
DECLARE v_count NUMBER; V_validation_msg VARCHAR2(500); BEGIN SELECT prd_items INTO v_count FROM summary WHERE prd_items = 'Total'; V_validation_msg:='The value of Total for BU is ' ||v_count|| '.\n' || 'You have to enter correct values to proceed further'; IF 1= 1 THEN --add some condition here if you want RETURN V_validation_msg; ELSE RETURN NULL; END IF; END;
-
按下按钮时:您的提交按钮。
【讨论】:
问题是,我希望上面的这个过程在提交过程之后运行。在此之前我还有一个页面进程,它将计算值,然后如果总数不等于 100,我想弹出警报。 为什么不在验证码过程中进行这个计算? 计算是经典报告的一部分,我在其中输入剩余行的值,一旦按下submit
按钮,我的过程将计算列的总值并将值存储在物品。如果项目值为 100,则不需要警报,否则我需要弹出警报通知用户该值小于或大于 100。以上是关于Oracle Apex:PL/SQL 块中的 Javascript 代码的主要内容,如果未能解决你的问题,请参考以下文章
pl/sql 块中的子选择上的 Oracle 8i 动态 SQL 错误
类似于 Oracle PL/SQL 块中的 finally Block (JAVA)