我已在SQL Developer中创建了一个连接并向数据库中添加了几个表。此外,我定义了一些触发器。它们都很好用,除了一个会出现“标识符太长”的错误。我知道30个字符的限制,但我无法确定是什么原因导致了这个特定的错误。通过这段代码,我正在尝试实现短路键。
表:
Izvestaj(IzvestajID,Datum,Opis,Tekst,PredmerID,NarucilacID,OsobaID,IzvrsilacID)
Predmer(PredmerID,Datum,Naziv,IzvrsilacID,LokacijaID)
Izvrsilac(IzvrsilacID,Naziv)
斜体值代表关系(表)的主键。
触发器:
create or replace TRIGGER "T_IZM_IZV"
AFTER UPDATE OF IZVRSILACID ON PREDMER
FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
EXECUTE IMMEDIATE ('ALTER TRIGGER'||'T_ZABRANA_IZM_IZV'||'DISABLE');
UPDATE IZVESTAJ SET IZVRSILACID=:NEW.IZVRSILACID
WHERE PREDMERID=:NEW.PREDMERID;
EXECUTE IMMEDIATE ('ALTER TRIGGER'||'T_ZABRANA_IZM_IZV'||'ENABLE');
END;
create or replace TRIGGER "T_ZABRANA_IZM_IZV"
BEFORE UPDATE OF IzvrsilacID ON Izvestaj
FOR EACH ROW
BEGIN
RAISE_APPLICATION_ERROR(-20000, 'Direct altering of IzvrsilacID is forbidden');
END;
我已经向表“Predmer”添加了一些行(Izvrsilac和Izvestaj也插入了一些值),当我尝试更改“执行者ID”列(外键)的值时,出现错误:
UPDATE "KORISNIK"."PREDMER" SET IZVRSILACID = '1' WHERE ROWID = 'AAAFBRAABAAALDxAAB' AND ORA_ROWSCN = '675526'
ORA-00972: identifier is too long
ORA-06512: at "KORISNIK.T_IZM_IZV", line 4
ORA-04088: error during execution of trigger 'KORISNIK.T_IZM_IZV'
One error saving changes to table "KORISNIK"."PREDMER":
Row 2: ORA-00972: identifier is too long
ORA-06512: at "KORISNIK.T_IZM_IZV", line 4
ORA-04088: error during execution of trigger 'KORISNIK.T_IZM_IZV'
这个错误的原因可能是什么?我已经尝试了几种方法,甚至将触发器、表和列重命名为一个字母的名称,但都没有成功。
P.S. 对于命名问题表示抱歉。我不想将表和列的名称翻译成英文,因为它们的长度会有所不同,这似乎是导致错误的原因。