Sql Oracle坏绑定变量,忽略语句,还有一个错误

Sql Oracle坏绑定变量,忽略语句,还有一个错误,sql,database,oracle,triggers,oracle-sqldeveloper,Sql,Database,Oracle,Triggers,Oracle Sqldeveloper,我是Oracle的新手,我尝试编写第一个真正的触发器,但有一些错误…:( 这是我的代码: create or replace TRIGGER CUSTERP_ABILITYVALUECODES_TRG BEFORE INSERT OR UPDATE OF CODE OR DELETE ON ABILITYVALUECODES REFERENCING NEW AS newest OLD AS oldest FOR EACH ROW declare s varchar2(4096); BEGIN

我是Oracle的新手,我尝试编写第一个真正的触发器,但有一些错误…:(

这是我的代码:

create or replace TRIGGER CUSTERP_ABILITYVALUECODES_TRG
BEFORE INSERT OR UPDATE OF CODE OR DELETE ON ABILITYVALUECODES
REFERENCING NEW AS newest OLD AS oldest
FOR EACH ROW
declare s varchar2(4096);
BEGIN
    if :oldest.CODE <> :newest.CODE then
    if :newest.CODE is null then
        s := 'NULL';
    else
        s := ASCIISTR(:newest.CODE);
    end if;
    s:= utl_url.escape(s);
    if :newest.CODE is null then
        CUSTERP_TRG('T_ABILITYVALUECODES', concat('C_CODE;KEY: ABILITYVALUE = ', :oldest.ABILITYVALUE,  ',OLD:', :oldest.CODE, ',NEW:', s));
    else
        CUSTERP_TRG('T_ABILITYVALUECODES', concat('C_CODE;KEY: ABILITYVALUE =',  :newest.ABILITYVALUE,  ',OLD:', :oldest.CODE, ',NEW:', s));
    end if;
end if;
END;
我得到:错误(6,13):PLS-00049:绑定变量错误


提前感谢!

在错误消息中很清楚。
错误在您用来调用方法-CUSTERP\u TRG的concat函数中。

CONCAT
函数只接受两个字符串参数。
如果您想要concat两个以上的参数,则需要多次使用concat函数。
您使用的是Oracle,因此只需使用管道-
|
进行连接即可。
我假设ABILITYVALUE和CODE列的类型为CHAR或VARCHAR或VARCHAR2。如果它们是INT,则可能需要使用to_CHAR。
用以下代码替换触发器中的if-else块。


当然可以。欢迎。:)
s := 'NULL';   
if :newest.CODE is null then
  CUSTERP_TRG( 'T_ABILITYVALUECODES', 'C_CODE;KEY: ABILITYVALUE = ' || :oldest.ABILITYVALUE ||  ',OLD:' || :oldest.CODE || ',NEW:' || s );
else
  CUSTERP_TRG( 'T_ABILITYVALUECODES', 'C_CODE;KEY: ABILITYVALUE =' || :newest.ABILITYVALUE ||  ',OLD:' || :oldest.CODE || ',NEW:' || s );
end if;