Java实现使用JDBC调用Oracle的函数,报Exception in thread “main“ java.sql.SQLException: ORA-06550: 异常

1.说明

【区别:(1)调用Oracle存储过程;(2)调用Oracle函数】

之前在Java实现使用JDBC调用Oracle的存储过程时,也遇到了这个问题,然后使用之前调用Oracle存储过程的解决办法无法解决当前的问题,故只能寻找新的解决办法。

之前解决调用Oracle存储过程的解决方法:https://blog.csdn.net/Sir_viter/article/details/107212577

 

2.问题

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

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

 

3.分析

由于之前做过了调用Oracle存储过程的例子,一看就知道是权限问题,但是在使用原来的解决办法时却行不通。

 

4.解决办法

Class.forName("oracle.jdbc.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "SYS as sysdba", "XXX密码信息XXX");
		
CallableStatement call=conn.prepareCall("{? =call findClassinfoYearSal(?,?,?)}");
		
call.registerOutParameter(1, oracle.jdbc.OracleTypes.NUMBER);
call.setString(2, "003");
call.registerOutParameter(3, oracle.jdbc.OracleTypes.VARCHAR);
call.registerOutParameter(4, oracle.jdbc.OracleTypes.NUMBER);

即,在SYS帐号后面,添加了 as sysdba,问题即得到解决(之前使用的是SCOTT帐号,使用SYS.函数名的方式调用也不行)。

 

5.结果

连接成功,调用成功。

 

  • 0
    点赞
  • 1
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sir_Viter

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值