【问题标题】:Oracle SQL trigger for automatically set a column value用于自动设置列值的 Oracle SQL 触发器
【发布时间】:2011-10-07 16:04:23
【问题描述】:

我正在编写一个 Oracle 触发器。此触发器应自动将“productId”列的值设置为刚刚插入的行的 oid。

我写的触发器是:

create or replace trigger MyProduct_id_trg 
after insert on MyProduct
begin 
   update MyProduct set productId = inserted.oid where oid = inserted.oid;
end; 

但是,这不起作用。

有人可以帮我解决这个问题吗?

问候。

【问题讨论】:

    标签: sql oracle triggers


    【解决方案1】:

    看起来您正试图在 Oracle 数据库上使用 SQL Server 语法!试试这个:

    create or replace trigger MyProduct_id_trg 
    before insert on MyProduct
    for each row
    begin 
       :new.productId := :new.oid;
    end; 
    

    (注意:之前不是之后,而是for each row。)

    【讨论】:

    • 对不起。忘了提到 productId 是 varchar2 而 oid 是 int。我需要做一些类型转换吗?
    • @Kevin - 会有隐式转换(如果产品 ID 不是完美数字,则会出错),但始终建议您在需要时显式转换。另外,如果您总是在其中存储一个数字,为​​什么产品 ID 是 varchar2?
    • 嗨。我收到错误:ORA-04098:触发器“MYPRODUCT_ID_TRG”无效并且重新验证失败
    • 在 SQL Plus 中你可以输入“show errors trigger myproduct_id_trg”来查看错误是什么。
    • 非常感谢。这解决了。对于 Oracle,我只需要使用 := 而不是 =。
    猜你喜欢
    • 2017-10-06
    • 1970-01-01
    • 2021-03-28
    • 2021-04-04
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多