gpt4 book ai didi

plsql - 执行触发器期间出现“数字或值错误”

转载 作者:行者123 更新时间:2023-12-01 07:46:49 25 4
gpt4 key购买 nike

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

当数据库中的组件被删除时,将执行一个 PL/SQL 触发器,它会从另一个表 (PORT) 中删除与组件的任何关联,并将端口引用设置为 0。

对于我尝试删除的大多数组件,触发器似乎都能完美运行,但对于其他组件却向我显示“数字或值错误”,我正在努力找出原因(如下所示)

error

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

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

与:

FOR i IN 1 .. port_arr.COUNT

如果没有记录被删除,数组将不会被初始化,port_arr.FIRSTport_arr.LAST 将返回 null,这将引发异常 ORA- 06502:PL/SQL:数字或值错误COUNT 始终可以安全使用,即使在尚未初始化的集合上也是如此。

关于plsql - 执行触发器期间出现“数字或值错误”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22512908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com