简体   繁体   English

SQL 存储过程编译错误:调用中 arguments 的数量或类型错误

[英]SQL stored procedure compile error: wrong number or types of arguments in call

I have created this stored procedure.我已经创建了这个存储过程。 However I get this error但是我收到此错误

ORA-06550:line 14 column 3: PLS-00306: wrong number or types of arguments in call to 'CHALLENGEUPDATE' when the values passed are CUSTID:='400800500'; ORA-06550:第 14 行第 3 列:PLS-00306:当传递的值为 CUSTID:='400800500' 时,调用“CHALLENGEUPDATE”时 arguments 的数量或类型错误; POLICYNAME:= 'POLICY';政策名称:= '政策'; CHALLENGEID:= 'CHALLENGEID1'; CHALLENGEID:= 'CHALLENGEID1'; PINPOSITIONS:= 'PINPOS'; PINPOSITIONS:= 'PINPOS';

The code is:代码是:

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;

The SEC_CHALLENGE table is this 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")
)

here is how I am running it:这是我的运行方式:

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;

If you use output parameters, marked with the "out" keyword, you must pass a variable for that parameter.如果您使用 output 参数,标有“out”关键字,则必须为该参数传递一个变量。 Output params are not optional. Output 参数不是可选的。 From the error, I gather that you have not done so.从错误中,我了解到您没有这样做。

if you are using toad, try it this way:如果您使用的是蟾蜍,请尝试以下方式:

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;

From the declaration:从声明中:

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

Your call to CHALLENGEUPDATE happens to miss an output variable for o_c OUT INTEGER .您对CHALLENGEUPDATE的调用恰好错过了o_c OUT INTEGER的 output 变量。 You may try the bellow:你可以试试下面的:

 exec CHALLENGEUPDATE( 
  CUSTID => CUSTID
, POLICYNAME => POLICYNAME
, CHALLENGEID => CHALLENGEID
, PINPOSITIONS => PINPOSITIONS
, O_RESULT => O_RESULT
, O_CODE => O_CODE 
, O_C => O_C_tobedeclared); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 执行存储过程时,在调用异常时获取错误的数量或参数类型 - Getting wrong number or types of arguments in call to exception while executing stored procedure PLS-00306:调用现有存储过程时参数的数量或类型错误 - PLS-00306: wrong number or types of arguments in call to existing stored procedure 对过程的调用中参数的数量或类型错误(PLS00306) - wrong number or types of arguments in call to procedure (PLS00306) 调用中的参数数量或类型错误(调用过程/函数时) - wrong number or types of arguments in call (while calling a procedure/function) 呼叫的参数数目或类型错误 - Wrong number or types of arguments in call to 调用“||”时的参数数量或类型错误 - Wrong number or types of arguments in call to '||' 呼叫中 arguments 的数量或类型错误 - wrong number or types of arguments in call PL / SQL-连接时始终收到此错误:PLS-00306:调用'||'时参数或参数类型错误 - PL/SQL - I keep getting this error when concatenating: PLS-00306: wrong number or types of arguments in call to '||' 错误 PLS-00306:在调用“P_CHECKAVGRATE”PL/SQL 时 arguments 的数量或类型错误:语句被忽略 - Error PLS-00306: wrong number or types of arguments in call to 'P_CHECKAVGRATE' PL/SQL: Statement ignored 执行过程时参数数量或类型错误 - Wrong number or types of arguments when executing a procedure
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM