Oracle create trigger error (bad bind variable)
It seems like the error code is telling you there's no such column ID in your table...
Somehow your environment is treating your code as SQL instead of a DDL statement. This works for me (running in sqlplus.exe from a command prompt):
SQL> create sequence mytable_seq;Sequence created.SQL> create table mytable (id number);Table created.SQL> CREATE OR REPLACE TRIGGER MYTABLE_TRG 2 BEFORE INSERT ON MYTABLE 3 FOR EACH ROW 4 BEGIN 5 select MYTABLE_SEQ.nextval into :new.id from dual; 6 END; 7 /Trigger created.
Note the trailing "/" - this might be important in the application you are compiling this with.
if one would use proper naming convention the spotting of this type of errors would be much easier ( where proper means using pre- and postfixes ) for generic object names hinting about their purpose better i.e. something like this would have spotted the correct answer
--START -- CREATE A SEQUENCE /* create table "TBL_NAME" ( "TBL_NAME_ID" number(19,0) NOT NULL , ... */ -------------------------------------------------------- -- drop the sequence if it exists -- select * from user_sequences ; -------------------------------------------------------- declare c int; begin select count(*) into c from user_sequences where SEQUENCE_NAME = upper('SEQ_TBL_NAME'); if c = 1 then execute immediate 'DROP SEQUENCE SEQ_TBL_NAME'; end if; end; / CREATE SEQUENCE "SEQ_TBL_NAME" MINVALUE 1 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE ; -- CREATE CREATE OR REPLACE TRIGGER "TRG_TBL_NAME" BEFORE INSERT ON "TBL_NAME" REFERENCING NEW AS New OLD AS Old FOR EACH ROW DECLARE tmpVar NUMBER; BEGIN tmpVar := 1 ; SELECT SEQ_TBL_NAME.NEXTVAL INTO tmpVar FROM dual; :NEW.TBL_NAME_ID := tmpVar; END TRG_TBL_NAME; / ALTER TRIGGER "TRG_TBL_NAME" ENABLE; -- STOP -- CREATE THE TRIGGER