我想测试给定的SQL语句在语法和语义上是否有效(即没有语法错误,没有字段拼写错误).
对于大多数数据库,Connection.prepareStatement和PreparedStatement.getMetaData都可以实现这一目的(无异常==良好查询).不幸的是,Oracle最新的驱动程序只解析SELECT查询,而不是其他类型的查询.年长的司机甚至不这样做.
Oracle是否提供了一些其他工具来解析SQL语句?
您可以使用Oracle DBMS_SQL包来解析字符串中保存的语句.例如:
SQL> declare 2 c integer; 3 l_statement varchar2(4000) := 'insert into mytable (col) values (1,2)'; 4 begin 5 c := dbms_sql.open_cursor; 6 dbms_sql.parse(c,l_statement,dbms_sql.native); 7 dbms_sql.close_cursor(c); 8 end; 9 / declare * ERROR at line 1: ORA-00913: too many values ORA-06512: at "SYS.DBMS_SYS_SQL",line 824 ORA-06512: at "SYS.DBMS_SQL",line 32 ORA-06512: at line 6
您可以将其包装到刚刚返回的存储函数中,例如如果语句有效则为1,如果无效则为0,如下所示:
function sql_is_valid ( p_statement varchar2 ) return integer is c integer; begin c := dbms_sql.open_cursor; dbms_sql.parse(c,p_statement,dbms_sql.native); dbms_sql.close_cursor(c); return 1; exception when others then return 0; end;
然后你可以使用它像这个PL / SQL示例:
:n := sql_is_valid('insert into mytable (col) values (1,2)');
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。