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

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当参数传入即可。