面试精华 2014-08-15 08:44 采纳率: 0%
浏览 617

帮我看下这触发器是否有错

create or replace trigger SM_lOG_TRI
before update
on SM_OR
for each row
declare
messagetext varchar2(200);
begin
messagetext:='_';
if :new.tr_no <> :old.tr_no THEN

   messagetext:=CONCAT(:new.tr_no);
 end if;

insert into SM_lOG_lOG values(:old.sales_order_id.,:old.create_user,sysdate,messagetext);
end;

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 11:45
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个触发器的语法是正确的,但是它有一个小错误。在begin块中,你应该使用::来声明变量,并且应该将:old替换为@OLD_以避免冲突。

    下面是修复后的触发器代码:

    create or replace trigger SM_lOG_TRI
    before update
    on SM_OR
    for each row
    declare
        message_text varchar2(200) := '_';
    begin
        -- Replace @OLD_ with :OLD_
        message_text := concat(@OLD_.tr_no);
        
        insert into SM_lOG_lOG (sales_order_id, create_user, sysdate, message_text)
        values (@OLD_.sales_order_id, @OLD_.create_user, sysdate, message_text);
    end;
    /
    

    请注意,我在上面的代码中使用了concat函数来合并@OLD_.tr_nomessage_text。这是因为在SQL中,字符串操作通常不需要括号。如果你正在使用的是PostgreSQL或其他支持字符串连接的语言(例如Python或Java),那么你需要使用括号来实现相同的功能。

    评论

报告相同问题?