如何解决SQL存储过程编译错误:调用中错误的数字或参数类型
|| 我已经创建了这个存储过程。但是我得到这个错误 ORA-06550:第14行第3列:PLS-00306: 错误的参数数量或类型 调用\'CHALLENGEUPDATE \' 传递的值是CUSTID := \'400800500 \'; POLICYNAME:= \'政策\';挑战:= \'CHALLENGEID1 \';定位:= \'PINPOS \'; 代码是:create or replace
procedure ChallengeUpdate
(
CustID IN SEC_CHALLENGE.CUSTOMERID%TYPE,PolicyName IN SEC_CHALLENGE.POLICY_NAME%TYPE,ChallengeId IN SEC_CHALLENGE.CHALLENGE_ID%TYPE,PinPositions IN SEC_CHALLENGE.PINPOSITIONS%TYPE,o_result OUT INTEGER,o_code OUT INTEGER,o_c OUT INTEGER
)
as
c integer;
begin
select count(*) into c from SEC_CHALLENGE xyz where xyz.CUSTOMERID=CustID and
xyz.POLICY_NAME=PolicyName;
if c = 0 then
INSERT INTO SEC_CHALLENGE(CUSTOMERID,CHALLENGE_ID,PINPOSITIONS,POLICY_NAME)
VALUES (CustID,ChallengeId,PinPositions,PolicyName);
else
UPDATE RBSSEC_CHALLENGE
SET CHALLENGE_ID=ChallengeId,PINPOSITIONS=PinPositions
WHERE CUSTOMERID=CustID and POLICY_NAME = PolicyName;
end if;
commit;
o_result:=0;
o_c:=c;
exception when others then
o_result:=-1;
o_c:=c;
rollback;
o_code :=SQLCODE;
end ChallengeUpdate;
SEC_CHALLENGE表是这个
CREATE TABLE \"MUJEEB\".\"RBSSEC_CHALLENGE\"
(
\"CUSTOMERID\" VARCHAR2(9 BYTE) NOT NULL ENABLE,\"CHALLENGE_ID\" VARCHAR2(50 BYTE),\"PINPOSITIONS\" VARCHAR2(20 BYTE) NOT NULL ENABLE,\"POLICY_NAME\" VARCHAR2(50 BYTE) NOT NULL ENABLE,CONSTRAINT \"RBSSEC_CHALLENGE1_PK\" PRIMARY KEY (\"CHALLENGE_ID\")
)
这是我的运行方式:
DECLARE CUSTID VARCHAR2(9);
POLICYNAME VARCHAR2(50);
CHALLENGEID VARCHAR2(50);
PINPOSITIONS VARCHAR2(20);
O_RESULT NUMBER;
O_CODE NUMBER;
BEGIN CUSTID :=\'400800500\' ;
POLICYNAME := \'POLICY\';
CHALLENGEID := \'CHALLENGEID1\';
PINPOSITIONS := \'PINPOS\';
CHALLENGEUPDATE( CUSTID => CUSTID,POLICYNAME => POLICYNAME,CHALLENGEID => CHALLENGEID,PINPOSITIONS => PINPOSITIONS,O_RESULT => O_RESULT,O_CODE => O_CODE );
DBMS_OUTPUT.PUT_LINE(\'O_RESULT = \' || O_RESULT);
DBMS_OUTPUT.PUT_LINE(\'O_CODE = \' || O_CODE);
END;
解决方法
如果您使用带有\“ out \”关键字标记的输出参数,则必须为该参数传递一个变量。输出参数不是可选的。从错误中,我认为您尚未这样做。
, 如果您正在使用蟾蜍,请尝试以下方式:
var o_result integer;
var ocode integer;
var oc integer;
exec ChallengeUpdate (\'400800500\',\'POLICY\',\'CHALLENGEID1\',\'PINPOS\',:o_result,:ocode,:oc );
print o_result;
print ocode ;
print oc;
, 从声明:
procedure ChallengeUpdate
(
CustID IN SEC_CHALLENGE.CUSTOMERID%TYPE,PolicyName IN SEC_CHALLENGE.POLICY_NAME%TYPE,ChallengeId IN SEC_CHALLENGE.CHALLENGE_ID%TYPE,PinPositions IN SEC_CHALLENGE.PINPOSITIONS%TYPE,o_result OUT INTEGER,o_code OUT INTEGER,o_c OUT INTEGER
) as
您对CHALLENGEUPDATE
的调用恰好错过了o_c OUT INTEGER
的输出变量。您可以尝试以下方法:
exec CHALLENGEUPDATE(
CUSTID => CUSTID,POLICYNAME => POLICYNAME,CHALLENGEID => CHALLENGEID,PINPOSITIONS => PINPOSITIONS,O_RESULT => O_RESULT,O_CODE => O_CODE,O_C => O_C_tobedeclared);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。