Oracle:语句 运行 相互转化

Oracle: Statements running into each other

我不熟悉 Oracle,正在测试旧版本所需的自动递增触发器,其中 IDENTITY 尚不可用。

CREATE TABLE stuff (
    id int PRIMARY KEY,
    data varchar(255)
);

CREATE SEQUENCE stuff_sequence;
CREATE TRIGGER test
BEFORE INSERT ON stuff
FOR EACH ROW
BEGIN
    SELECT stuff_sequence.nextval INTO :new.id FROM dual;
END;

INSERT INTO stuff(data) VALUES('test');

使用 SQL Developer,我可以 运行 CREATE TABLE 语句,然后 CREATE SEQUENCE 语句,但是当我 运行 CREATE TRIGGER 语句,它也会突出显示 INSERT 语句,然后抱怨“遇到符号 "INSERT"。显然,如果我尝试 运行 全部作为一个脚本,我会得到同样的错误。

这里发生了什么,我该如何解决?

只需将/放在触发代码的末尾即可。代表上面代码的结尾。

CREATE TRIGGER test
BEFORE INSERT ON stuff
FOR EACH ROW
BEGIN
    SELECT stuff_sequence.nextval INTO :new.id FROM dual;
END;
/ -- this

INSERT INTO stuff(data) VALUES('test');

/ 在输入 DML 或 DDL 期间或 PL/SQL 表示 "terminate the current statement, execute it and store it to the SQLPLUS buffer" 并且在多行代码中需要 / 以指示代码到此结束.

干杯!!