Oracle SQL Developer-表达式的类型错误
因此,我遵循这一点是为了避免突变错误,因为我曾经查询触发触发器的表,但这显然不起作用。因此,我创建了这个包,正如指南明确指出的那样Oracle SQL Developer-表达式的类型错误,oracle,plsql,Oracle,Plsql,因此,我遵循这一点是为了避免突变错误,因为我曾经查询触发触发器的表,但这显然不起作用。因此,我创建了这个包,正如指南明确指出的那样 CREATE OR REPLACE PACKAGE NOVOANOLECTIVO AS TYPE ANOARRAY IS TABLE OF ROWID INDEX BY BINARY_INTEGER; NOVOSTUPLOS ANOARRAY; VAZIO ANOARRAY; END; 下面的触发器没有编译,因为它说“表达式的类型错误”。但我只是在
CREATE OR REPLACE PACKAGE NOVOANOLECTIVO
AS
TYPE ANOARRAY IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
NOVOSTUPLOS ANOARRAY;
VAZIO ANOARRAY;
END;
下面的触发器没有编译,因为它说“表达式的类型错误”。但我只是在遵循指南,那么问题出在哪里
CREATE OR REPLACE TRIGGER T_AFTERANO
AFTER INSERT OR UPDATE ON ANOLECTIVO
FOR EACH ROW
DECLARE
POSICAO INTEGER;
BEGIN
--APANHAR O CODIGO DOS NOVOS TUPLOS
POSICAO := NOVOANOLECTIVO.NOVOSTUPLOS.COUNT + 1;
NOVOANOLECTIVO.NOVOSTUPLOS(POSICAO) := :NEW.CODIGO;
END;
正如您在评论中所说,错误在这一行
novoanoloctivo.NOVOSTUPLOS(POSICAO):=:NEW.CODIGO
这意味着错误是因为您将:new.codigo
放在NOVOSTUPLOS(POSICAO)
上,这是一个ROWID
类型的表,而:new.codigo
应该是与ROWID
相同的类型(不管这是什么,我只是在查询中知道的)但是它不是。对于startNOVOSTUPLOS
没有在任何地方初始化。这就是错误的原因吗?我不能说,因为您没有说代码上发生错误的行在哪里。但是它可以novonovolectivo.NOVOSTUPLOS(POSICAO):=:NEW.CODIGO代码>。这是一行。所以错误是因为您将:new.codigo
放在NOVOSTUPLOS(POSICAO)上,这是一个ROWID表。这意味着:new.codigo必须是相同类型的ROWID(无论这是什么,我只在查询中知道)。但它不是