Java实现使用JDBC连接Oracle(调用存储过程),报Exception in thread “main“ java.sql.SQLException:

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-22 22:17   41   0

1.问题

Java语言实现使用JDBC调用Oracle的存储过程时报了异常,如下所示:

Exception in thread "main" java.sql.SQLException: ORA-06550: 第 1 行, 第 7 列: 
PLS-00201: 必须声明标识符 'FINDINFO'
ORA-06550: 第 1 行, 第 7 列: 
PL/SQL: Statement ignored

 at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
 ………………省略………………

百度了很多资料,有说参数不对的,也有说命名不对的,还有说是存储过程写得不对的,尝试了个边,都没有解决问题。

2.分析

最后在一个帖子上说是权限问题(虽然它的解决方法不适用于我这里),它的解决方法是:

===>> grant execute on findinfo to SCOTT ;

说明:

(1)findinfo:是我的过程函数名;

(2)SCOTT:是我从java连接oracle的用户;而创建该存储过程的用户是SYS。

3.解决方法

有了这个思路,就顺着这个可能是问题的根源追查下去,于是查到,可以在调用的存储过程前面加上该连接用户的名称。部分代码如下:

//加载驱动
Class.forName(driverClass);
  
//2.获取连接对象
Connection conn = DriverManager.getConnection(url,user,psw);
  
//3.创建执行存储过程的语句对象
String sql="{call SYS.FINDINFO(?,?,?)}";
CallableStatement call = conn.prepareCall(sql);

注:{call SYS.FINDINFO(?,?,?)} ,SYS是创建该存储过程的用户;FINDINFO是存储过程名称;

4.结果

修改完成后运行,已经成功了。如下图所示:

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP