我写了一个用户登陆的存储过程 编译通过了。想要通过输出参数res的值来判断结果。但是调用出错,大家帮忙看看是什么问题啊~~~~~ CREATE PROCEDURE log(name IN varchar,word IN varchar,res OUT int) IS
s1 varchar(20);
s2 varchar(30);
CURSOR cur IS
SELECT username,password FROM UserLog;
BEGIN
OPEN cur;
FETCH cur INTO s1,s2;
  LOOP
IF s1=name AND s2=word THEN
res:=1; return;EXIT;
ELSE 
IF s1=name THEN 
res:=-1; END IF;
END IF;
IF cur%NOTFOUND THEN 
res:=0;
END IF;
END LOOP;
CLOSE cur;
END;
调用过程是这么写的
==================================
String call = "{call log(?,?,?)}";
CallableStatement proc = con.prepareCall(call);
         proc.setString(1, user);                       // 给输入参数传值
proc.setString(2, password);
proc.setString(3, out);                        //out声明为int了,存放调用结果
proc.registerOutParameter(3,Types.INTEGER);  // 声明输出参数类型
proc.execute();                              // 执行
         out = proc.getInt(3);运行报错 
=====================================
PL/SQL: Statement ignored
java.sql.SQLException: [Oracle][ODBC][Ora]ORA-06550: 第 1 行, 第 7 列: 
PLS-00306: 调用 'LOG' 时参数个数或类型错误
ORA-06550: 第 1 行, 第 7 列: 
PL/SQL: Statement ignored

错误在什么地方 该怎么更改呢  刚刚接触存储过程 不太了解

解决方案 »

  1.   

    把下面这句去掉试试!
    proc.setString(3, out); 
      

  2.   

    输出的参数类型也修改一下:
    proc.registerOutParameter(3,java.sql.Types.INTEGER);  // 声明输出参数类型
     
      

  3.   

    oracle存储过程 只能放到package里 调用。调用时用 packagename.procedurename(
      

  4.   

    应该不是调用的问题 我在orcale里直接执行存储过程 
    也是提示 参数个数或类型出错 可是实在找不出是什么出错 明明是一致的啊 和表的字段定义都是一致的~~ 高手帮帮忙吧  很急!
      

  5.   


    procedure可以编译么,既然可以编译,报
    PLS-00306: 调用 'LOG' 时参数个数或类型错误 
    ORA-06550: 第 1 行, 第 7 列: 
    当然就是调用的问题了哟。proc.setString(3, out); 把这句注释掉,然后看看结果如何
    你所你在plsql里调用也出这个错,看看你plsql里是如何调用的。估计也是调用错误。
      

  6.   

     proc.setString(1, user);                      // 给输入参数传值 
    proc.setString(2, password); 
    proc.setString(3, out);      
    这不是传了3个in参数么,当然类型错误了。
    去掉proc.setString(3, out);  
      

  7.   

    我觉得也是参数问题:
    proc.setInt(1, user);                      // 给输入参数传值 
    proc.setInt(2, password); 
    proc.setInt(3, out);