在Oracle Express中创建触发器

bre*_*ter 43 oracle oracle11g oracle-sqldeveloper

我试图在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;
/
Run Code Online (Sandbox Code Playgroud)

当我尝试创建触发器时,我得到一个屏幕,要求我提供一些"绑定".该对话框只有一个复选框"null".这是什么意思,我如何使脚本正常工作?

在进行这种"自动增量"时需要采取什么预防措施?

输入绑定

小智 52

似乎SQL Developer认为您运行的是简单的DML(数据操作)脚本,而不是DDL(数据定义).它还认为这:new.id是一个可绑定的变量.

为什么会这样,我不知道; 我无法在Oracle SQL Developer 2.1中重现它.

尝试在模式中打开一个新的SQL工作表窗口,theschema然后按F5(不F9)执行"整个"脚本(而不是语句).


小智 15

这就是我解决这个问题的方法,把"set define off" 在命令之前:

set define off;
create or replace trigger [...]
[...]
end;
/
Run Code Online (Sandbox Code Playgroud)

然后突出显示两个命令并按F9运行.或者您可以使用F5运行所有命令.

看来,如果命令是用F9执行的,那么set define off不会生效.