Oracle SQL 错误 PLS-00049:错误的绑定变量 'NEW.NOOFCUSTOMERS'

Posted

技术标签:

【中文标题】Oracle SQL 错误 PLS-00049:错误的绑定变量 \'NEW.NOOFCUSTOMERS\'【英文标题】:Oracle SQL Error PLS-00049: bad bind variable 'NEW.NOOFCUSTOMERS'Oracle SQL 错误 PLS-00049:错误的绑定变量 'NEW.NOOFCUSTOMERS' 【发布时间】:2013-10-28 06:35:33 【问题描述】:

我必须创建一个触发器以将“NoOfCustomers”添加到 STORE 表中。如果客户数量大于限制,则会显示错误消息。我在尝试运行触发器时收到错误“绑定变量 'NEW.NOOFCUSTOMERS'”错误,我似乎无法找出原因。

CREATE OR REPLACE TRIGGER NoOfCustomersTrigger 
      BEFORE INSERT ON STORE
      FOR EACH ROW 
      DECLARE V_CAPACITY SHOPS.LIMIT%TYPE;
    BEGIN 
          SELECT LIMIT INTO V_LIMIT
          FROM SHOPS, SERVES
          WHERE CUSTID = SERVES.CUSTID AND STORENO = :NEW.STORENO;
          IF (:NEW.NOOFCUSTOMERS > V_LIMIT) THEN 
            RAISE_APPLICATION_ERROR (-20004,'The Number of Customers exceeds the LIMIT'); 
          END IF; 
        END; 

【问题讨论】:

我刚刚意识到,我需要在其中创建 NOOFCUSTOMERS 吗? 您是在问是否需要NOOFCUSTOMERS 预先存在于表格中?由于 pl/SQL 代码在编译时评估表结构,所以答案是肯定的。 是的,我一问就知道了。现在我有两个错误:1) PL/SQL: ORA-00918: 列定义不明确 2) PL/SQL: SQL 语句被忽略 ORA-00918 表示两个表中都存在同名的列 - 在查询中为列添加前缀:tablename.columnname 【参考方案1】:

您的代码中似乎有一些错误,

    在声明部分使用V_LIMIT 而不是V_CAPACITY,因为您在代码中使用v_limit。 sql 语句会抛出column ambiguously defined 错误,列必须引用为TABLE.COLUMN_NAME 或TABLE_ALIAS.COLUMN_NAME。

这样试试,

CREATE OR REPLACE 
TRIGGER noofcustomerstrigger 
      BEFORE INSERT ON STORE
      FOR EACH ROW 
DECLARE v_limit shops.LIMIT%TYPE;
BEGIN 
     SELECT LIMIT INTO v_limit
     FROM shops A, serves b
     WHERE A.custid = b.custid AND storeno = :NEW.storeno;

     IF (:NEW.noofcustomers > v_limit) THEN 
          raise_application_error (-20004,'The Number of Customers exceeds the LIMIT'); 
     END IF; 
END;

【讨论】:

以上是关于Oracle SQL 错误 PLS-00049:错误的绑定变量 'NEW.NOOFCUSTOMERS'的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL:任何人都可以帮我解决Error(2,32):PLS-00049:错误的绑定变量'WORKED_HOURS'

有人可以帮我修复错误 pls-00049 吗?

PLS-00049 不良绑定变量 [关闭]

pl/sql 绑定错误

oracle中怎么获得sql语句的错误信息

Mybatis 批量更新 ORA-00911: 无效字符的错误