使用 Oracle 11g 在 SQL Developer 中绑定变量
Bind variable in SQL Developer with Oracle 11g
我在尝试使用插入前触发器执行序列时遇到问题。
CREATE TABLE personne (ID number, nom varchar2(250 char));
CREATE SEQUENCE s_inc_pers START WITH 1 INCREMENT BY 1;
CREATE TRIGGER tr_inc_pers ON t1 BEFORE INSERT
FOR EACH ROW
DECLARE
BEGIN
select s_inc_pers into :new.t1.ID from DUAL;
END.
如果您尝试使用 :NEW
引用不是目标 table 中的列的内容,Oracle 会报告错误的绑定变量。在这种情况下,它可能会提示您输入绑定值,因为语句格式不正确。
The NEW
pseudorecord 指的是触发 table 中受语句影响的行。当您使用伪记录字段时,您不需要(也不能)包含 table 名称,因此 :new.t1.ID
应该只是 :new.ID
.
要get the next value from the sequence需要使用nextval
,不能只提供序列名
您的子句顺序也有误,您需要在目标之前插入 DML 事件 table。
CREATE TRIGGER tr_inc_pers BEFORE INSERT ON t1
FOR EACH ROW
BEGIN
select s_inc_pers.nextval into :new.ID from DUAL;
END;
因为您使用的是 11g,所以您甚至不需要 select 来自 dual,you can just assign the column value:
CREATE TRIGGER tr_inc_pers BEFORE INSERT ON t1
FOR EACH ROW
BEGIN
:new.ID := s_inc_pers.nextval;
END;
我在尝试使用插入前触发器执行序列时遇到问题。
CREATE TABLE personne (ID number, nom varchar2(250 char));
CREATE SEQUENCE s_inc_pers START WITH 1 INCREMENT BY 1;
CREATE TRIGGER tr_inc_pers ON t1 BEFORE INSERT
FOR EACH ROW
DECLARE
BEGIN
select s_inc_pers into :new.t1.ID from DUAL;
END.
如果您尝试使用 :NEW
引用不是目标 table 中的列的内容,Oracle 会报告错误的绑定变量。在这种情况下,它可能会提示您输入绑定值,因为语句格式不正确。
The NEW
pseudorecord 指的是触发 table 中受语句影响的行。当您使用伪记录字段时,您不需要(也不能)包含 table 名称,因此 :new.t1.ID
应该只是 :new.ID
.
要get the next value from the sequence需要使用nextval
,不能只提供序列名
您的子句顺序也有误,您需要在目标之前插入 DML 事件 table。
CREATE TRIGGER tr_inc_pers BEFORE INSERT ON t1
FOR EACH ROW
BEGIN
select s_inc_pers.nextval into :new.ID from DUAL;
END;
因为您使用的是 11g,所以您甚至不需要 select 来自 dual,you can just assign the column value:
CREATE TRIGGER tr_inc_pers BEFORE INSERT ON t1
FOR EACH ROW
BEGIN
:new.ID := s_inc_pers.nextval;
END;