gpt4 book ai didi

oracle - 将 SQL 解析为 Oracle JDBC 驱动程序

转载 作者:行者123 更新时间:2023-12-03 00:06:07 24 4
gpt4 key购买 nike

我想测试给定的 SQL 语句在语法和语义上是否有效(即没有语法错误和字段拼写错误)。

对于大多数数据库,Connection.prepareStatementPreparedStatement.getMetaData 都可以解决问题(没有异常(exception) == 良好的查询)。不幸的是,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)');

关于oracle - 将 SQL 解析为 Oracle JDBC 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3873322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com