日期:2014-05-16 浏览次数:20474 次
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当参数传入即可。
?
?