【发布时间】: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