On Fri, July 24, 2009 18:31, Priya wrote: > > David, > thank you for the reply.I know that the problem can easily be solved > by using the actual column name mycol instead of the variable.But, > I want know if there is a way to get the column name dynamically from > a variable. > > On Jul 24, 2:54 pm, ddf <orat...@msn.com> wrote: >> Comments embedded. >> >> On Jul 24, 1:55 pm, Priya <chavanpr...@gmail.com> wrote: >> >> >> >> > Hi, >> >> > I am a oracle PL/SQL newbie.Can someone please help me solve the below >> > problem? >> >> > Consider a table called mytable with one column called mycol .I have >> > written a on-update trigger. >> >> > CREATE OR REPLACE TRIGGER "testtrigger" BEFORE >> > UPDATE ON mytable FOR EACH ROW >> > DECLARE >> > Test VARCHAR(1000); >> >> > BEGIN >> >> > TEST:='mycol'; >> > IF :OLD.TEST <> :NEW.TEST THEN >> > DBMS_OUTPUT.PUT_LINE ("Hi"); >> > END IF >> >> > i get the error bad bind variable.This is obviously because the >> > compiler is thinking that test is a column and not a variable. >> >> Correct. That's not the only error in your code, though. >> >> > How >> > should I make the compiler aware that Test is a variable and the >> > compiler must resolver it to mycol? >> >> You cannot. This is a trigger, against a specific table, and the >> blocks you're referencing (:OLD and :NEW) only apply to the columns >> defined in that table, not to variables you may have a whim to create. >> >> > I know i can replace the variable >> > with mycol but that not what I want to do. >> >> You're trigger won't compile and won't run, and updates to mytable >> will fail: >> >> SQL> -- >> SQL> -- Create test table >> SQL> -- >> SQL> create table mytable( >> 2 mycol varchar2(20) >> 3 ); >> >> Table created. >> >> SQL> >> SQL> -- >> SQL> -- Create bad trigger >> SQL> -- >> SQL> -- Won't work because TEST is not a column >> SQL> -- in mytable >> SQL> -- >> SQL> CREATE OR REPLACE TRIGGER "testtrigger" BEFORE >> 2 UPDATE ON mytable FOR EACH ROW >> 3 DECLARE >> 4 Test VARCHAR(1000); >> 5 >> 6 >> 7 BEGIN >> 8 >> 9 >> 10 TEST:='mycol'; >> 11 IF :OLD.TEST <> :NEW.TEST THEN >> 12 DBMS_OUTPUT.PUT_LINE ("Hi"); >> 13 END IF; >> 14 >> 15 END; >> 16 / >> >> Warning: Trigger created with compilation errors. >> >> SQL> >> SQL> show errors >> No errors. >> SQL> >> SQL> -- >> SQL> -- Insert data >> SQL> -- >> SQL> >> SQL> insert all >> 2 into mytable >> 3 values('Yarg') >> 4 into mytable >> 5 values('Yink') >> 6 into mytable >> 7 values('Yorg') >> 8 select * From dual; >> >> 3 rows created. >> >> SQL> >> SQL> commit; >> >> Commit complete. >> >> SQL> >> SQL> -- >> SQL> -- Perform update which fails >> SQL> -- >> SQL> >> SQL> set serveroutput on size 1000000 >> SQL> >> SQL> update mytable set mycol='Fred'; >> update mytable set mycol='Fred' >> * >> ERROR at line 1: >> ORA-04098: trigger 'BING.testtrigger' is invalid and failed re- >> validation >> >> SQL> >> SQL> -- >> SQL> -- Create trigger >> SQL> -- >> SQL> CREATE OR REPLACE TRIGGER "testtrigger" BEFORE >> 2 UPDATE ON mytable FOR EACH ROW >> 3 BEGIN >> 4 >> 5 >> 6 IF :OLD.mycol <> :NEW.mycol THEN >> 7 DBMS_OUTPUT.PUT_LINE ('Hi'); >> 8 END IF; >> 9 >> 10 END; >> 11 / >> >> Trigger created. >> >> SQL> >> SQL> show errors >> No errors. >> SQL> >> SQL> -- >> SQL> -- Perform update >> SQL> -- >> SQL> >> SQL> update mytable set mycol='Fred'; >> Hi >> Hi >> Hi >> >> 3 rows updated. >> >> SQL> >> >> Sometimes what you want to do and what you must do are two different >> things. >> >> >> >> > Thanks in advance! >> >> > Priya >> >> David Fitzjarrell > > > I know of no way to do it Priya. There might be some strange hack but I cannot picture what it would be.
Why do you want to do it this way? what is the problem that you are trying to solve? Rob --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---