On Aug 8, 9:58 am, Yuvaraj Sundaresan <yuvarajssundare...@gmail.com> wrote: > Dear friends, > I need one urgent help, my requirement is one table many people will > update at the end of the day i need all the update script of that table. So > i used the trigger to build the update statement dynamically but its not > working see the below coding and help to proceed. In this coding after > execute immediate its not working. > > create or replace trigger TEST > after insert OR UPDATE OR DELETE on person_table REFERENCING OLD AS OLD > NEW AS NEW > for each row > declare > SQL1 VARCHAR2(4000); > SQL2 VARCHAR2(4000); > SQL3 VARCHAR2(4000); > SQL4 VARCHAR2(4000); > begin > IF INSERTING THEN > NULL; > ELSIF UPDATING THEN > SQL1 := 'UPDATE person_table '; > FOR I IN (SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = > 'PERSON_TABLE') LOOP > DBMS_OUTPUT.PUT_LINE(1); > EXECUTE IMMEDIATE('SELECT :OLD.'||I.COLUMN_NAME||' FROM DUAL') INTO > SQL2; > DBMS_OUTPUT.PUT_LINE(2); > EXECUTE IMMEDIATE('SELECT :NEW.'||I.COLUMN_NAME||' FROM DUAL') INTO > SQL3; > IF SQL2 <> SQL3 THEN > IF SQL4 IS NOT NULL THEN > SQL4 := SQL4 ||' , '||I.COLUMN_NAME||' = '||SQL3; > ELSE > SQL4 := SQL4 ||' , '||I.COLUMN_NAME||' = '||SQL3; > END IF; > END IF; > END LOOP; > DBMS_OUTPUT.PUT_LINE(3); > SQL1 := SQL1 || SQL4 ||' WHERE NAME = '||:NEW.NAME; > DBMS_OUTPUT.PUT_LINE(4||'--'||SQL1); > INSERT INTO MY_SQL VALUES (SQL1); > ELSIF DELETING THEN > NULL; > END IF; > end TEST;
What, exactly, are you trying to do with this? The error I see is ERROR at line 1: ORA-01008: not all variables bound ORA-06512: at "BING.TEST", line 14 ORA-04088: error during execution of trigger 'BING.TEST' because of the selects against DUAL you're trying to make dynamically. Your trigger can be reduced to: SQL> create or replace trigger TEST 2 after insert OR UPDATE OR DELETE on person_table -- REFERENCING OLD AS OLD NEW AS NEW 3 for each row 4 declare 5 SQL1 VARCHAR2(4000); 6 SQL2 VARCHAR2(4000); 7 SQL3 VARCHAR2(4000); 8 SQL4 VARCHAR2(4000); 9 begin 10 IF INSERTING THEN 11 NULL; 12 ELSIF UPDATING THEN 13 SQL1 := 'UPDATE person_table set yarp = '||:new.yarp||', znip = '''||:new.znip||''', pling = '''||:new.pling||''' where name = '''||:new.name||''''; 14 DBMS_OUTPUT.PUT_LINE(1); 15 DBMS_OUTPUT.PUT_LINE(2); 16 DBMS_OUTPUT.PUT_LINE(3); 17 DBMS_OUTPUT.PUT_LINE('4 --'||SQL1); 18 INSERT INTO MY_SQL VALUES (SQL1); 19 ELSIF DELETING THEN 20 NULL; 21 END IF; 22 end TEST; 23 / Trigger created. SQL> SQL> show errors No errors. SQL> SQL> set serveroutput on size 1000000 SQL> And it will function correctly: SQL> insert into person_table 2 values(1, 'Bleebo','Tran', sysdate); 1 row created. SQL> SQL> update person_table 2 set name = 'Roopwinger' where yarp = 1; 1 2 3 4 --UPDATE person_table set yarp = 1, znip = 'Tran', pling = '09- AUG-11' where name = 'Roopwinger' 1 row updated. SQL> SQL> select * from my_sql; SQLTXT ------------------------------------------------------------------------------------------------------------------------------------ UPDATE person_table set yarp = 1, znip = 'Tran', pling = '09-AUG-11' where name = 'Roopwinger' SQL> David Fitzjarrell -- You received this message because you are subscribed to the Google Groups "Oracle PL/SQL" group. To post to this group, send email to Oracle-PLSQL@googlegroups.com To unsubscribe from this group, send email to oracle-plsql-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/Oracle-PLSQL?hl=en