Oracle DB - 标识符太长

Mis*_*vic 3 oracle triggers plsql oracle11g oracle-sqldeveloper

我在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;  
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)

我已经在表"Predmer"中添加了一些行(Izvrsilac和Izvestaj也插入了一些值),当我尝试更改列"IzvrsilacID"(外键)的值时,我收到一个错误:

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'
Run Code Online (Sandbox Code Playgroud)

什么可能导致此错误?我尝试了几件事,甚至将触发器,表格和列重命名为单字母名称,但没有任何成功.
PS抱歉命名.我不想将表格和列名称翻译成英文,因为它的长度不同,这似乎首先导致错误.

Mar*_*bak 10

这些线:

EXECUTE IMMEDIATE ('ALTER TRIGGER'||'T_ZABRANA_IZM_IZV'||'DISABLE');
EXECUTE IMMEDIATE ('ALTER TRIGGER'||'T_ZABRANA_IZM_IZV'||'ENABLE');
Run Code Online (Sandbox Code Playgroud)

应该是这样的:

EXECUTE IMMEDIATE ('ALTER TRIGGER '||'T_ZABRANA_IZM_IZV'||' DISABLE');
EXECUTE IMMEDIATE ('ALTER TRIGGER '||'T_ZABRANA_IZM_IZV'||' ENABLE');
Run Code Online (Sandbox Code Playgroud)

请注意添加的空格.

没有添加空格,您尝试执行:

ALTER TRIGGERT_ZABRANA_IZM_IZVDISABLE
Run Code Online (Sandbox Code Playgroud)

ALTER TRIGGERT_ZABRANA_IZM_IZVENABLE
Run Code Online (Sandbox Code Playgroud)

这显然是行不通的.

希望有所帮助.