我需要做一個觸發器,但唯一的區別,我想要做的是獲得一個動態值根據':new.COLUMN_NAME'和':old.COLUMN_NAME'動態column_value根據動態column_name在觸發器
我帶來了表的列在查詢之後,我有一個for循環中運行它..
這是我的觸發器:
CREATE OR REPLACE TRIGGER aft_ins_soliccambio
AFTER INSERT OR DELETE OR UPDATE
ON SEG_V_SOLICCAMBIO
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
DECLARE
old_col_value VARCHAR2 (4000);
new_col_value VARCHAR2 (4000);
BEGIN
FOR REC IN ( SELECT OWNER, TABLE_NAME, COLUMN_NAME
FROM all_tab_columns
WHERE OWNER = 'EUCEDA' AND (TABLE_NAME = 'SEG_V_SOLICCAMBIO')
ORDER BY column_id)
LOOP
EXECUTE IMMEDIATE ' select :new.' || REC.COLUMN_NAME || ' from dual'
INTO new_col_value;
pkg_tumi.insert_auditoria ('SEG_V_SOLICCAMBIO',
REC.COLUMN_NAME,
:new.EMPR_IDEMPRESA_N,
fn_get_pk ('SEG_V_SOLICCAMBIO', 1),
fn_get_pk ('SEG_V_SOLICCAMBIO', 2),
fn_get_pk ('SEG_V_SOLICCAMBIO', 3),
fn_get_pk ('SEG_V_SOLICCAMBIO', 4),
fn_get_pk ('SEG_V_SOLICCAMBIO', 5),
fn_get_pk ('SEG_V_SOLICCAMBIO', 6),
1,
'',
new_col_value,
SYSDATE,
NULL);
END LOOP;
END;
當我編譯觸發它不拋出任何錯誤,但當我嘗試在表中插入一個新的值,我正在觸發[R它拋出這個錯誤:
ORA-01008: no todas las variables han sido enlazadas ORA-06512: en "EUCEDA.AFT_INS_SOLICCAMBIO", línea 10 ORA-04088: error durante la ejecución del disparador 'EUCEDA.AFT_INS_SOLICCAMBIO'
檢查我意識到這個問題是之間的問題「執行即時..」,但我看到,是因爲:new.'dynamic_column」不被認可。請幫忙!我在這個問題上花了很多時間,我無法解決這個問題。
感謝和抱歉我的英語。
非常感謝!當我使用它時非常有用。我放棄了,你的回答就像一個燈(= 我試過了,它工作正常(調整我的代碼當然)。非常感謝你!^^ – user1112291 2011-12-23 20:10:40