我试图让表格Staff的主键自动排序。
输入:
CREATE SEQUENCE staff_idseq START WITH 1 INCREMENT BY 1 MAXVALUE 9999;
CREATE TABLE Staff
(
staffid number(4) not null primary key,
name varchar2(21) not null unique,
permission varchar2(10) not null
);
CREATE OR REPLACE TRIGGER staff_idtrig
BEFORE INSERT ON Staff
FOR EACH ROW WHEN (new.staffid is null)
BEGIN
SELECT staff_idseq.nextval INTO :new.staffid FROM dual;
END;
但是当我加载它时,在创建序列和表之后,它要求我输入更多命令,好像我忘了在行尾添加分号。也许在我的查询中有一些错误,但是我找不到我犯的错误,因为我没有使用Ctrl + c从输入提示中退出。
答案 0 :(得分:1)
触发器是PL / SQL程序,它使用分号作为行终止符。因此,要执行create or replace
语句,我们需要在新行上使用正斜杠完成代码。
试试这个:
CREATE OR REPLACE TRIGGER staff_idtrig
BEFORE INSERT ON Staff
FOR EACH ROW WHEN (new.staffid is null)
BEGIN
SELECT staff_idseq.nextval INTO :new.staffid FROM dual;
END;
/
正如@a_horse_with_no_name所说,如果您使用11g,为什么不使用这种更简单的语法:
:new.staffid := staff_idseq.nextval;
在封面下,Oracle仍会在双重语句上执行select
,它只是语法糖(并且输入更少!)