簡體   English   中英

簡單的觸發錯誤?! PL/SQL:ORA-00933:

[英]Simple Trigger Error?! PL/SQL: ORA-00933:

我正在嘗試創建一個觸發器,它將值插入到審核表中以供管理員用戶批准。 觸發器會將添加到顧問表中的新值插入到此審計表中。

我已經多次重新觸發觸發器,但似乎無法繞過編譯錯誤! 我認為這是小事?

DROP TABLE   MyAuditTable;
CREATE TABLE MyAuditTable (
    audit_id INTEGER NOT NULL,
    new_name VARCHAR2 (30),
    new_postcode VARCHAR2 (20),
    status     VARCHAR2 (15), 
    CONSTRAINT pk_MyAuditTable  PRIMARY KEY ( audit_id )
); 


DROP sequence MySeq;
Create sequence MySeq MINVALUE 1 MAXVALUE 9999999 INCREMENT BY 1 START WITH 1;

drop trigger MyTrigger;
create trigger MyTrigger
after insert on my_consultant_table
for each row
begin
    insert into MyAuditTable values (
        MySeq.nextval, :new.con_name, 
        :new.con_postcode, 
        'Pending'
    )
    from my_consultant_table;
end;
/

錯誤:PL/SQL:ORA-00933:

所以審計表現在應該有來自顧問表的新輸入數據,其中包含姓名和郵政編碼屬性。 另一個觸發器將觸發,以便在狀態更改時允許這些更改。

謝謝你!

from my_consultant_table

是不必要的。

應該:

insert into MyAuditTable values (MySeq.nextval, :new.con_name, :new.con_postcode, 'Pending');

此 ORA-00933 表示觸發器聲明中存在語法錯誤:

begin
    insert into MyAuditTable values (
        MySeq.nextval, :new.con_name, 
        :new.con_postcode, 
        'Pending'
    )
    from my_consultant_table;
end;

from my_consultant_table的尾隨沒有意義,只需將其刪除即可:

begin
    insert into MyAuditTable values (
        MySeq.nextval, :new.con_name, 
        :new.con_postcode, 
        'Pending'
    );
end;

嘗試這個:

begin
insert into MyAuditTable 
   select
    MySeq.nextval,
    :new.con_name, 
    :new.con_postcode, 
    'Pending'
   from dual;
end;

一個提示:當你創建一個序列時,總是使用從 1 到 9999999.... 一一遞增。 只需使用

create sequence owner.table nocache;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM