Sql 不了解PLS-00049:坏绑定变量是什么
在Oracle SQL中创建存储过程时,我得到了一个PLS-00049坏绑定变量。不确定这里出了什么问题:Sql 不了解PLS-00049:坏绑定变量是什么,sql,oracle,stored-procedures,Sql,Oracle,Stored Procedures,在Oracle SQL中创建存储过程时,我得到了一个PLS-00049坏绑定变量。不确定这里出了什么问题: CREATE OR REPLACE PROCEDURE ADD_REGISTRATION( customer_id_arg IN DECIMAL, cus_account_id_arg IN DECIMAL, registration_date_arg IN DATE) IS BEGIN SELECT * FROM R
CREATE OR REPLACE PROCEDURE ADD_REGISTRATION(
customer_id_arg IN DECIMAL,
cus_account_id_arg IN DECIMAL,
registration_date_arg IN DATE)
IS
BEGIN
SELECT *
FROM REGISTRATION
WHERE CUSTOMER_ID = :NEW.CUSTOMER_ID;
IF CUSTOMER_ID = :NEW.CUSTOMER_ID THEN
INSERT INTO REGISTRATION(customer_id, cus_account_id,
registration_date)
VALUES(customer_id_arg, CUS_ACCOUNT_ID_SEQ.NEXTVAL, CAST(SYSDATE AS
DATE));
ELSE
RAISE_APPLICATION_ERROR(-20001, 'Customer ID does not exist. Choose an existing Customer ID in order to
register an extra account under an existing customer.');
END IF;
END;
以下是具体错误:
错误8,25:PLS-00049:绑定变量“NEW.CUSTOMER\u ID”错误
错误9,22:PLS-00049:坏绑定变量“NEW.CUSTOMER_ID”触发器中只存在:NEW和:OLD伪行。如果您想调用一个使用:NEW或:OLD数据的子程序,您可以这样做,但必须将每个字段作为参数传递给过程或函数。例如:
CREATE OR REPLACE PROCEDURE ADD_REGISTRATION(customer_id_arg IN DECIMAL)
IS
rowRegistration REGISTRATION%ROWTYPE;
BEGIN
-- The following SELECT will raise NO_DATA_FOUND if the passed-in CUSTOMER_ID
-- doesn't exist, in which case we want to insert the new customer into the database.
-- If the CUSTOMER_ID arg already exists in REGISTRATION we want to raise an
-- application error.
SELECT *
INTO rowRegistration
FROM REGISTRATION
WHERE CUSTOMER_ID = customer_id_arg;
RAISE_APPLICATION_ERROR(-20001, 'Customer ID does not exist. Choose an existing Customer ID in order to
register an extra account under an existing customer.');
EXCEPTION
WHEN NO_DATA_FOUND THEN
INSERT INTO REGISTRATION(customer_id, cus_account_id, registration_date)
VALUES(customer_id_arg, CUS_ACCOUNT_ID_SEQ.NEXTVAL, SYSDATE);
END ADD_REGISTRATION;
然后在触发器中调用上述例程:
CREATE OR REPLACE TRIGGER REGISTRATION_VIEW_II
INSTEAD OF INSERT ON REGISTRATION_VIEW
FOR EACH ROW
BEGIN
REGISTRATION_ADD(:NEW.CUSTOMER_ID);
END REGISTRATION_VIEW_II;
在这里,我假设这个触发器应该是视图上的INSERT触发器,而不是INSERT触发器,因为这是在没有进一步上下文的情况下对我来说唯一有意义的事情,但是您可能还有一些我不知道的其他用例
祝您好运。您似乎混淆了触发器和存储过程。如果我想用存储过程添加一个新实例,但检查主键值是否存在,该怎么办?这里的情况是,我的客户可以有多个帐户。如果我想以多个帐户的名称注册多个帐户,我想使用存储过程来创建额外的帐户。因此,如果我要添加一个新的客户id,我想确保它已经存在,以便我可以创建一个新帐户。如果不是,则提出错误…:NEW是仅在触发器中有效的构造。我建议你再问一个问题,提供样本数据,期望的结果,并清楚地解释你想要实现的目标。