我写了一个用户登陆的存储过程 编译通过了。想要通过输出参数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
错误在什么地方 该怎么更改呢 刚刚接触存储过程 不太了解
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
错误在什么地方 该怎么更改呢 刚刚接触存储过程 不太了解
proc.setString(3, out);
proc.registerOutParameter(3,java.sql.Types.INTEGER); // 声明输出参数类型
也是提示 参数个数或类型出错 可是实在找不出是什么出错 明明是一致的啊 和表的字段定义都是一致的~~ 高手帮帮忙吧 很急!
procedure可以编译么,既然可以编译,报
PLS-00306: 调用 'LOG' 时参数个数或类型错误
ORA-06550: 第 1 行, 第 7 列:
当然就是调用的问题了哟。proc.setString(3, out); 把这句注释掉,然后看看结果如何
你所你在plsql里调用也出这个错,看看你plsql里是如何调用的。估计也是调用错误。
proc.setString(2, password);
proc.setString(3, out);
这不是传了3个in参数么,当然类型错误了。
去掉proc.setString(3, out);
proc.setInt(1, user); // 给输入参数传值
proc.setInt(2, password);
proc.setInt(3, out);