create OR REPLACE trigger trans_code_t
after
insert
on EMR_ICH
FOR EACH row;
BEGIN
IF inserting THEN
trans_code_p(EMR); --呼叫存盤程序
END IF;
END;
create or replace procedure trans_code_p(TABLE_NAME in varchar(100))
as
VORG_CODE VARCHAR(100);
V_SQL VARCHAR2(1000);
NEWORG_CODE VARCHAR(100);
Begin
VORG_CODE := (SELECT ORG_CODE FROM TABLE_NAME where rownum < 2 ); --獲取插入記錄的ORG_CODE欄位的值
IF VORG_CODE = '371721A30001' --插入的值
THEN
NEWORG_CODE := '173023809'; --設定新值
V_SQL := 'UPDATE ' || TABLE_NAME || 'SET' || 'ORG_CODE' || '=' || NEWORG_CODE;
EXECUTE IMMEDIATE(V_SQL);
END;
End;
報錯,很多錯
uj5u.com熱心網友回復:
set前后加空格再看看uj5u.com熱心網友回復:
V_SQL := 'UPDATE ' || TABLE_NAME || ' SET ' || 'ORG_CODE = ''' || NEWORG_CODE || '' where 應該有條件吧';uj5u.com熱心網友回復:
存盤程序和觸發器的創建腳本必須分兩次執行,否則會報錯。
create or replace procedure trans_code_p(table_name in varchar(100))
as
vorg_code varchar(100);
v_sql varchar2(1000);
neworg_code varchar(100);
begin
v_sql := 'select org_code from '||table_name||' where rownum < 2';
execute immediate v_sql into vorg_code;
if vorg_code = '371721A30001' then
neworg_code := '173023809'; --設定新值
v_sql := 'update ' || table_name || ' set org_code ' || ' = ' || neworg_code;
execute immediate v_sql;
commit;
end;
end;
uj5u.com熱心網友回復:
謝謝您的解答,我想要插入資料的org_code進行if判斷,我感覺rownum <2 是不行的
uj5u.com熱心網友回復:
其實,沒必要再單獨寫一個存盤程序,寫一起就行了。你的觸發器是行級觸發,如果非要單獨出來存盤程序,拿那也是建議,把 :new.ORG_CODE 這個值以引數形式傳遞到存盤程序里面,而不是再次獲取
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/78001.html
標籤:基礎和管理
上一篇:oracle登陸例外
