JDBC执行创建存储过程的语句,出现SQL-92错误

JDBC执行创建存储过程的语句,出现SQL-92错误。

在网上查询一下,有人说特殊字符' \n会导致这种错误,排除这些原因后,仍找不到原因。

发现数据库对存储过程里的SQL语法并不会做完全的验证,例如把select写成sel也不会报错。而这个存储过程拿到PL/SQL里去运行,可以创建。

估计是存储过程里用到的特定关键词被JDBC分析出不合法。

最后将存储过程DDL存储在文件里,使用读一行运行一次的方法,找到了发生错误的地方为被注释掉的代码。这段代码用到了C的结构体语法。

 

既然JDBC执行SQL里,进行语法验证时,不能忽略注释里的内容(不知道是否可以设置)。那只好采用,在数据库里创建一个存储过程,专门用来执行SQL语句。

create or replace executeSql(vSqlIn varchar2)
 AUTHID CURRENT_USER
is 
 begin
  execute immediate vSqlIn;
 end executeSql;
 

注意AUTHID CURRENT_USER用于给当前用户授权,否则执行对数据库结构的修改语句会报错:ORA-01031:insufficient privileges

 

在Java代码中用JDBC调用executeSql这个存储过程,把要创建的存储过程DDL当参数传入即可。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值