di99lipe
November 22nd, 2007, 10:36 AM
Hello gurus!
I get ORA-01008: not all variables bound error when trying to execute immidiate function in a trigger. This is the code
FUNCTION****************
CREATE OR REPLACE FUNCTION table2rowtype ( prefix IN VARCHAR2, tableName IN VARCHAR2) RETURN VARCHAR2
IS
CURSOR v_cursor IS
SELECT column_name FROM user_tab_columns
WHERE TABLE_NAME = tableName
ORDER BY column_id;
v_sql VARCHAR2(8000):= NULL;
BEGIN
FOR v_rec IN v_cursor
LOOP
IF v_sql iS NOT NULL
THEN
v_sql := v_sql || ',';
END IF;
v_sql := v_sql || prefix || v_rec.column_name;
END LOOP;
v_sql := 'SELECT ' || v_sql || ' FROM DUAL';
RETURN v_sql;
END ;
/
TRIGGER*****************
CREATE OR REPLACE TRIGGER CHARGES_ArchiveTrigger
BEFORE INSERT or UPDATE or DELETE ON CHARGES
REFERENCING OLD as old NEW as new
FOR EACH ROW
DECLARE
archiveRec CHARGES%ROWTYPE ;
BEGIN
EXECUTE IMMEDIATE table2rowtype(':new.','CHARGES') INTO archiveRec;
-- call to package/procedure to process archiving: archive(archiveRec) ;
END ;
I get ORA-01008: not all variables bound error when trying to execute immidiate function in a trigger. This is the code
FUNCTION****************
CREATE OR REPLACE FUNCTION table2rowtype ( prefix IN VARCHAR2, tableName IN VARCHAR2) RETURN VARCHAR2
IS
CURSOR v_cursor IS
SELECT column_name FROM user_tab_columns
WHERE TABLE_NAME = tableName
ORDER BY column_id;
v_sql VARCHAR2(8000):= NULL;
BEGIN
FOR v_rec IN v_cursor
LOOP
IF v_sql iS NOT NULL
THEN
v_sql := v_sql || ',';
END IF;
v_sql := v_sql || prefix || v_rec.column_name;
END LOOP;
v_sql := 'SELECT ' || v_sql || ' FROM DUAL';
RETURN v_sql;
END ;
/
TRIGGER*****************
CREATE OR REPLACE TRIGGER CHARGES_ArchiveTrigger
BEFORE INSERT or UPDATE or DELETE ON CHARGES
REFERENCING OLD as old NEW as new
FOR EACH ROW
DECLARE
archiveRec CHARGES%ROWTYPE ;
BEGIN
EXECUTE IMMEDIATE table2rowtype(':new.','CHARGES') INTO archiveRec;
-- call to package/procedure to process archiving: archive(archiveRec) ;
END ;