简单触发错误?! PL / SQL:ORA-00933:

时间:2019-01-02 14:13:54

标签: php oracle plsql triggers 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:

因此,审核表现在应具有来自顾问表的新输入数据,其中包含名称和邮政编码属性。将触发另一个触发器,以便在状态更改时允许这些更改。

谢谢!

3 个答案:

答案 0 :(得分:2)

from my_consultant_table

不必要。

应该是:

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

答案 1 :(得分:2)

此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;

答案 2 :(得分:0)

尝试一下:

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

一个提示:创建u序列时,始终使用1到9999999 .... anc逐个递增。 只需使用

create sequence owner.table nocache;