【问题标题】:Bind variable in SQL Developer with Oracle 11g在 SQL Developer 中使用 Oracle 11g 绑定变量
【发布时间】:2017-06-30 08:54:25
【问题描述】:

我在尝试使用插入前触发器执行序列时遇到问题。

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.

【问题讨论】:

  • 如果您在原始问题中包含您遇到的问题类型,通常可以帮助人们更快更好地回答:例如您遇到的错误消息或行为以及它与您的不同之处会期待

标签: oracle oracle11g database-trigger


【解决方案1】:

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

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

get the next value from the sequence需要使用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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    相关资源
    最近更新 更多