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)

Oracle APEX PL/SQL 错误

ORACLE APEX PL SQL 过程错误

在 oracle apex 中将 sql 查询重写为 pl/sql

从 apex 页面进程调用 pl/sql 函数