Creating a trigger in Oracle Express

后端 未结 4 510
面向向阳花
面向向阳花 2020-12-24 05:14

I was trying to do something like auto-increment in Oracle 11g Express and SQL Developer. I know very little about Oracle and I am also new to triggers.

I tried run

相关标签:
4条回答
  • 2020-12-24 05:45

    I am a novice at this so keep that in mind as I give my answer. I think the issue is that the code

    create or replace trigger insert_nums
    before insert on theschema.thetable
    for each row
    begin
    select test1_sequence.nextval into :new.id from dual;
    end;
    

    Is actually a script and not straight forward SQL statement. Hence you have to run the "Run Script". I discovered that when I had a worksheet open in SQL Developer that if I had anywhere in the worksheet the any code for trigger like above then even I just tried to run a statement that SQL Developer would look back in the worksheet and try to run the script. To stop that from happening I had to comment out the code. And If I did want to run the code for the trigger than I had to open a new worksheet, place the code there and do a RUN SCRIPT.

    0 讨论(0)
  • 2020-12-24 05:50

    It seems that SQL Developer thinks that you are running a plain DML (data manipulation) script, not a DDL (data definition). It also thinks that :new.id is a bindable variable.

    Why this happens, I don't know; I can't reproduce it in Oracle SQL Developer 2.1.

    Try to open a new SQL worksheet window in the theschema schema and execute a "whole" script (not a statement) by pressing F5 (not F9).

    0 讨论(0)
  • 2020-12-24 05:55

    This is how I have solved this problem, put "set define off;" before the command:

    set define off;
    create or replace trigger [...]
    [...]
    end;
    /
    

    Then highlight both commands and press F9 to run. Or you could run all the commands with F5.

    It seems, that if the commands are executed separetly with F9, then the set define off does not take affect.

    0 讨论(0)
  • 2020-12-24 06:08

    For my case, solution was entering "newrow" for 'new' and "oldrow" for 'old' as values for the binds...

    0 讨论(0)
提交回复
热议问题