![]() | |
![]() |
| | Thread Tools | Display Modes |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
Hello, I am building a trigger such as below: CREATE OR REPLACE TRIGGER "SCHEMA"."nameoftrigger" BEFORE INSERT OR UPDATE OF "column", "column" ON "TABLENAME" FOR EACH ROW BEGIN UPDATE TABLENAME SET COLUMNNAME1 = *to_char(column) *, COLUMNNAME2 = to_char(column) WHERE TABLENAME.column = :NEW.ID *; END; I am trying to do a simple thing (normally). I want to update 2 (nvarchar2) columns in my table with a (number) value that I retrieve using the new id updated. Each time I want to apply this I have the (in)famous message "Missing IN or OUT parameter at index::1" I stripped down my request to this: BEGIN UPDATE ATTR_PRODUCT SET PID = 4 *, TID = 5 WHERE ATTR_PRODUCT.ID=100; END; and it works. When I modify the WHERE clause with WHERE ATTR_PRODUCT.ID= :NEW.ID; it fails. I believed the :NEW.id was allowed when using FOR EACH ROW I am using Oracle 11G enterprise 11.1.0.7.0 64bits. Thanks for your help with this Wilfried |
#3
| |||
| |||
|
|
I've guessed at the table structure and what I think you're trying to do; your example will eventually compile but will update the columns to NULL (I set the updated columns to NOT NULL to illustrate the point): SQL> CREATE OR REPLACE TRIGGER NAMEOFTRIGGER 2 BEFORE INSERT OR UPDATE OF columnname1, columnname2 ON TABLNAME 3 FOR EACH ROW 4 5 BEGIN 6 :new.columnname1 := to_char(:new.id); 7 :new.columnname2 := to_char(:new.id); 8 END; 9 / SQL> select * from tablname; ID COLUMNNAME1 COLUMNNAME2 UPDATEDT ---------- -------------------- -------------------- --------- 1 1 1 09-NOV-11 2 2 2 10-NOV-11 3 3 3 08-NOV-11 4 4 4 09-NOV-11 5 5 5 10-NOV-11 6 6 6 08-NOV-11 7 7 7 09-NOV-11 8 8 8 10-NOV-11 9 9 9 08-NOV-11 10 10 10 09-NOV-11 David Fitzjarrell |
#4
| |||
| |||
|
|
ddf wrote: I've guessed at the table structure and what I think you're trying to do; your example will eventually compile but will update the columns to NULL (I set the updated columns to NOT NULL to illustrate the point): SQL> *CREATE OR REPLACE TRIGGER NAMEOFTRIGGER * *2 *BEFORE INSERT OR UPDATE OF columnname1, columnname2 ON TABLNAME * *3 *FOR EACH ROW * *4 * *5 *BEGIN * *6 * * * * *:new.columnname1 := to_char(:new.id); * *7 * * * * *:new.columnname2 := to_char(:new.id); * *8 *END; * *9 */ SQL> *select * from tablname; * * * * *ID COLUMNNAME1 * * * * *COLUMNNAME2 * * * * *UPDATEDT ---------- -------------------- -------------------- --------- * * * * * 1 1 * * * * * * * * * *1 * * * * * * * * * *09-NOV-11 * * * * * 2 2 * * * * * * * * * *2 * * * * * * * * * *10-NOV-11 * * * * * 3 3 * * * * * * * * * *3 * * * * * * * * * *08-NOV-11 * * * * * 4 4 * * * * * * * * * *4 * * * * * * * * * *09-NOV-11 * * * * * 5 5 * * * * * * * * * *5 * * * * * * * * * *10-NOV-11 * * * * * 6 6 * * * * * * * * * *6 * * * * * * * * * *08-NOV-11 * * * * * 7 7 * * * * * * * * * *7 * * * * * * * * * *09-NOV-11 * * * * * 8 8 * * * * * * * * * *8 * * * * * * * * * *10-NOV-11 * * * * * 9 9 * * * * * * * * * *9 * * * * * * * * * *08-NOV-11 * * * * *10 10 * * * * * * * * * 10 * ** * * * * * * 09-NOV-11 David Fitzjarrell When I first learned about relational database theory, there was something about removing redundancy. *That was a long time ago. *Times have changed.- Hide quoted text - - Show quoted text - |
#5
| |||
| |||
|
|
I agree; I don't recommend duplicating data in a table (or across tables if it can be avoided). I probably should have stated that but I treated this as an example. David Fitzjarrell |
![]() |
| Thread Tools | |
| Display Modes | |
| |