使用Oracle 11g在SQL Developer中绑定变量

时间:2017-02-12 09:25:43

标签: oracle oracle11g database-trigger

尝试使用before insert触发器执行序列时遇到问题。

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.

1 个答案:

答案 0 :(得分:2)

如果您尝试引用:NEW不是目标表中的列的内容,Oracle会报告错误的绑定变量。在这种情况下,它可能会提示您输入绑定值,因为语句格式不正确。

The NEW pseudorecord是指触发表中受该语句影响的行。当您使用伪记录字段时,您不需要(并且不必)包含表名,因此:new.t1.ID应该只是:new.ID

get the next value from the sequence到[{3}},您需要使用nextval,而不能只提供序列名称。

您的子句也是错误的顺序,您需要DML事件(插入)来满足目标表。

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时,你甚至不需要选择双重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;