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'