Plsql ';数字或值错误';在触发器执行期间
我目前正在使用Oracle Apex开发一个应用程序,该应用程序被用作数据库,用于保存布线记录 删除数据库中的组件时,将执行PL/SQL触发器,该触发器从另一个表(端口)中删除与组件的所有关联,并将端口引用设置为0 对于我试图删除的大多数组件,触发器似乎都能很好地工作,但对于其他组件,它会给我带来一个“数字或值错误”,我正在努力找出原因(如下所示) 正在执行的触发器如下所示:Plsql ';数字或值错误';在触发器执行期间,plsql,triggers,oracle-apex,Plsql,Triggers,Oracle Apex,我目前正在使用Oracle Apex开发一个应用程序,该应用程序被用作数据库,用于保存布线记录 删除数据库中的组件时,将执行PL/SQL触发器,该触发器从另一个表(端口)中删除与组件的所有关联,并将端口引用设置为0 对于我试图删除的大多数组件,触发器似乎都能很好地工作,但对于其他组件,它会给我带来一个“数字或值错误”,我正在努力找出原因(如下所示) 正在执行的触发器如下所示: create or replace trigger "COMPONENT_TRIGPORT" AFTER delet
create or replace trigger "COMPONENT_TRIGPORT"
AFTER delete
on "COMPONENT"
for each row
declare
TYPE portType IS TABLE OF PORT%ROWTYPE;
port_arr portType;
begin
DELETE FROM PORT
where PORT.COMPONENT_ID = :old.COMPONENT_ID
RETURNING PORT_ID, PORT_NUMBER, COMPONENT_ID, CONNECTOR_ID, PORT_TYPE
BULK COLLECT INTO port_arr;
begin
FOR i IN port_arr.FIRST .. port_arr.LAST
LOOP
update PORT
set PORT.CONNECTOR_ID = 0
where PORT.CONNECTOR_ID = port_arr(i).CONNECTOR_ID;
END LOOP;
end;
end;
我知道给我错误的那行是
where PORT.COMPONENT_ID = :old.COMPONENT_ID
但我不明白为什么它在某些情况下运行良好,但在其他情况下却不行 更换
FOR i IN port_arr.FIRST .. port_arr.LAST
与:
如果未删除任何记录,则数组将不会初始化,
port\u arr.FIRST
和port\u arr.LAST
将返回null,这将引发异常ORA-06502:PL/SQL:numeric or value error
COUNT
始终可以安全使用,即使在尚未初始化的集合上也是如此。谢谢,工作非常完美!仍在掌握PL/SQL,因此感谢您的帮助和清晰的解释。
FOR i IN 1 .. port_arr.COUNT