oracle - Oracle: Statements running into each other
问题描述
I am not fluent with Oracle, and am testing out an auto-incrementing trigger required for older versions, where IDENTITY
is not yet available.
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');
Using SQL Developer, I can run the CREATE TABLE
statement, and then the CREATE SEQUENCE
statement, but when I run the CREATE TRIGGER
statement, it highlights the INSERT
statement as well, and then complains about `Encountered the symbol "INSERT". Obviously, if I try to run the whole lot as a single script I get the same error.
What is happening here, and how do I fix it?
解决方案
只需放在/
触发代码的末尾即可。这代表它上面的代码的结尾。
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 缓冲区”,并且/
需要在多行代码中表示代码到此结束。
干杯!!
推荐阅读
- r - 如何在我的 Arima 预测图的 xaxis 上获取日期而不仅仅是数字
- javascript - 为什么我的 onClick 在渲染时会激活?
- sql - Oracle 11g DB 链接使用情况
- python-3.x - 通过 package_data 将非 python 文件复制到 Scripts 目录
- chef-infra - 如何从执行资源命令输出中设置节点属性值
- c++ - 有人可以为此提供伪代码吗?
- sql - 将两列与 SQL Server 2008 中其他表中的列连接并比较?
- c# - ChromelyResponse.Status 被忽略
- r - 为什么这个线性模型的拟合值不连续?
- c# - 带有 Access 数据库的 ASP.NET 中的插入子句问题