【问题标题】:How to display a plsql error message with dynamic action如何使用动态操作显示 plsql 错误消息
【发布时间】:2019-03-07 20:52:42
【问题描述】:

我有一个返回单行的 plsql,我正在通过动态操作执行它,我想通过 APEX_ERROR.ADD_ERROR 显示不同的错误消息,以防没有值。 显然,所有代码都是正确的,但如果出现错误,它不会显示任何消息。

注意:动态动作是通过在客户端按下一个键 javascript = // Enter 键 this.browserEvent.which === 13 不要提交页面。

不知道是不是方法不对,你能实现更好的方法。

        declare
        l_serie number;
        l_codigo number;
        l_product_name varchar2(500);
        l_precio number;
        l_exists number;

        begin

          select count(*)
          into l_exists
          from (
          select a.ID_INGRESO_SERIE,
                 a.CODIGO_PRODUCTO,
                (select PRODUCT_NAME 
                 from   TBL_PRD_DET
                 where  PRODUCT_ID =a.CODIGO_PRODUCTO ) PRODUCTO,
                (select PRICE
                 from   TBL_SALE_PRICE
                 where PRODUCT_ID=a.CODIGO_PRODUCTO
                 and INVETORY_TYPE=1) PRECIO  
          from   TBL_INGRESOS_DET_SERIES a
          where  ID_INGRESO_SERIE =:P58_CODIGO
          and ESTADO_SERIE = 1
          );


          if l_exists > 0 then

            select a.ID_INGRESO_SERIE,
                   a.CODIGO_PRODUCTO,
                   (select PRODUCT_NAME 
                    from   TBL_PRD_DET
                    where  PRODUCT_ID =a.CODIGO_PRODUCTO ) PRODUCTO,
                   (select PRICE
                    from   TBL_SALE_PRICE
                    where PRODUCT_ID=a.CODIGO_PRODUCTO
                    and INVETORY_TYPE=1) PRECIO  
            into   l_serie,l_codigo,l_product_name,l_precio      
            from   TBL_INGRESOS_DET_SERIES a
            where  ID_INGRESO_SERIE =:P58_CODIGO
            and    ESTADO_SERIE = 1;

            APEX_COLLECTION.ADD_MEMBER (
            p_collection_name =>'LISTA_VENTA',
            p_n001            =>l_codigo,--CODIGO
            p_n002            => 1, ---UNIDADES
            p_n003            =>l_precio , ---PRECIO
            p_n004            =>0,   ---DESCUENTO
            p_n005            =>l_serie,---CODIGO SERIE
            p_c001            =>l_product_name,---NOMBRE PRODUCTO
            p_d001            => SYSDATE
            );

          else
            apex_error.add_error (
            p_message => '¡no exit producto!',
            p_display_location => apex_error.c_inline_in_notification);

          end if;
        end;

【问题讨论】:

  • 您确定实际上没有任何价值 - 因为两个语句的过滤器不同?您的count(*) 可能会找到ESTADO_SERIE 不是1 的行,所以它进入if 分支但什么都不做? (你可以使用游标循环和标志来避免重复查询,如果它应该是相同的......)
  • raise_application_error 显示一条消息,但您为什么不使用验证过程?
  • 感谢 Alex Poole 的观察
  • 在任何情况下我如何使用验证?

标签: oracle oracle-apex oracle-apex-5.1


【解决方案1】:

apex_error 包仅与页面处理相关,与动态操作的交互无关。

您需要使用这样的技术来显示消息 https://www.talkapex.com/2018/03/custom-apex-notification-messages/

也许使用这里提到的概念 https://community.oracle.com/message/14948411#14948411

您的流程将在其中设置隐藏值,然后使用自定义 API 显示。你如何使这个可重复使用取决于你。

【讨论】:

  • 您的解决方案是一个很好的方法。谢谢,暂时解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-17
  • 2014-08-22
  • 2017-01-29
  • 2019-06-02
相关资源
最近更新 更多