CREATE OR REPLACE TRIGGER APPR_TRI_PROV_CYXKZXX
BEFORE INSERT ON MID_PROV_CYXKZXX_TMP
FOR EACH ROW
BEGIN
SELECT
REPLACE(:OLD.CERT_CODE, '-', '')
INTO :NEW.CERT_CODE
FROM DUAL;
END APPR_TRI_PROV_CYXKZXX;
CREATE OR REPLACE TRIGGER APPR_TRI_PROV_CYXKZXX BEFORE INSERT ON MID_PROV_CYXKZXX_TMP FOR EACH ROW declare NEWCERT_CODE varchar2(1000); BEGIN SELECT REPLACE(:OLD.CERT_CODE, '-', '') INTO NEWCERT_CODE FROM DUAL; END APPR_TRI_PROV_CYXKZXX;
试一下看
------解决方案-------------------- insert操作 有old一说么
你是要干嘛
SELECT
REPLACE(:new.CERT_CODE, '-', '')
INTO :NEW.CERT_CODE
FROM DUAL;试下看
这种处理干嘛还用触发器在做 应用程序里就应该处理掉 ------解决方案-------------------- 第一,这种replace操作尽量放在程序里 而不应该放在触发器里
触发器是用来处理其他比较复杂的逻辑的 像这种问题 完全可以在执行sql前处理
第二,insert时,只有new,delete时,只有old,update时,new和old都有
第三,SELECT REPLACE(:new.CERT_CODE, '-', '') INTO :NEW.CERT_CODE FROM DUAL;
这种写法太啰嗦了,直接写成:NEW.CERT_CODE :=REPLACE(:new.CERT_CODE, '-', '')就可以了 存储过程本身就是sql,可以直接用replace函数,不需要再借助select语句