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
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to