Plsql ';数字或值错误';在触发器执行期间

Plsql ';数字或值错误';在触发器执行期间,plsql,triggers,oracle-apex,Plsql,Triggers,Oracle Apex,我目前正在使用Oracle Apex开发一个应用程序,该应用程序被用作数据库,用于保存布线记录 删除数据库中的组件时,将执行PL/SQL触发器,该触发器从另一个表(端口)中删除与组件的所有关联,并将端口引用设置为0 对于我试图删除的大多数组件,触发器似乎都能很好地工作,但对于其他组件,它会给我带来一个“数字或值错误”,我正在努力找出原因(如下所示) 正在执行的触发器如下所示: create or replace trigger "COMPONENT_TRIGPORT" AFTER delet

我目前正在使用Oracle Apex开发一个应用程序,该应用程序被用作数据库,用于保存布线记录

删除数据库中的组件时,将执行PL/SQL触发器,该触发器从另一个表(端口)中删除与组件的所有关联,并将端口引用设置为0

对于我试图删除的大多数组件,触发器似乎都能很好地工作,但对于其他组件,它会给我带来一个“数字或值错误”,我正在努力找出原因(如下所示)

正在执行的触发器如下所示:

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