Oracle:语句相互运行

ohfgkhjo  于 2023-05-16  发布在  Oracle
关注(0)|答案(1)|浏览(124)

我对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。显然,如果我尝试将整个脚本作为一个脚本运行,我会得到相同的错误。
这里发生了什么,我该如何解决?

pepwfjgg

pepwfjgg1#

只需将/放在触发器代码的末尾。它表示它上面的代码的结尾。

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时意味着“终止当前语句,执行它并将其存储到SQLPLUS缓冲区”,并且在多行代码中需要/以指示代码到此结束。

相关问题