在Oracle Express中创build一个触发器

我正在尝试在Oracle 11g Express和SQL Developer中执行类似自动递增的操作。 我对Oracle的了解不多,而且对触发器也不熟悉。

我试过运行这个,但是我不知道如何正确地做。

CREATE TABLE theschema.thetable (id NUMBER PRIMARY KEY, name VARCHAR2(30)); CREATE SEQUENCE theschema.test1_sequence START WITH 1 INCREMENT BY 1; 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; / 

当我尝试创build触发器时,我得到一个屏幕,要求我进行一些“绑定”。 对话框只有一个checkbox“null”。 这是什么意思,我怎么做一个脚本,正常工作?

做这种“自动增量”时要采取什么预防措施?

输入绑定

看来,SQL Developer认为你正在运行一个普通的DML(数据操作)脚本,而不是DDL(数据定义)。 它也认为:new.id是一个可绑定的variables。

为什么发生这种情况,我不知道; 我无法在Oracle SQL Developer 2.1中重现它。

尝试在theschema模式中打开一个新的SQL工作表窗口,并通过按F5 (不是F9 )来执行一个“整个”脚本(不是语句)。

这就是我解决这个问题的方法,把“定义掉” 命令之前:

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

然后突出显示这两个命令并按F9运行。 或者你可以用F5运行所有的命令。

看来,如果这些命令是用F9单独执行的,那么定义closures不起作用。

对于我的情况,解决scheme进入“新”和“古老”作为“旧”作为价值绑定…

我在这方面是一个新手,所以要记住,因为我给我的答案。 我认为问题在于代码

 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; 

实际上是一个脚本而不是直接的SQL语句。 因此你必须运行“运行脚本”。 我发现,当我在SQL Developer中打开一个工作表时,如果我在工作表中有任何地方的触发器的代码,那么即使我只是试图运行一个语句,SQL Developer将回顾工作表,并尝试运行脚本。 为了防止这种情况发生,我不得不将这些代码注释掉。 如果我想要运行触发器的代码,而不是打开一个新的工作表,请将代码放在那里,并执行一个RUN SCRIPT。