我正在准备一个屏幕,用户将在其中输入plsql的匿名块(声明...开始......结束),并且我将它的块保存到文件中,并在必要时运行它。 但我想在执行之前验证用户对我的数据库的输入是否有语法错误。当我用谷歌搜索它时,我发现我可以使用antlr,但我找不到任何可用的样本。任何人都可以向我展示一个示例,我对java和plsql上下文中的其他解决方案持开放态度。
答案 0 :(得分:3)
您可以使用DBMS_SQL解析plsql命令:
SQL> CREATE OR REPLACE PROCEDURE parse(p_command VARCHAR2) AUTHID CURRENT_USER IS
2 l_cursor INTEGER;
3 BEGIN
4 l_cursor := dbms_sql.open_cursor;
5 dbms_sql.parse(l_cursor, p_command, dbms_sql.native);
6 dbms_sql.close_cursor(l_cursor);
7 EXCEPTION
8 WHEN OTHERS THEN
9 dbms_sql.close_cursor(l_cursor);
10 RAISE;
11 END;
12 /
Procedure created
SQL> exec parse ('BEGIN NULL;END;');
PL/SQL procedure successfully completed
SQL> exec parse ('BEGIN incorrect_statement;END;');
begin parse ('BEGIN incorrect_statement;END;'); end;
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00201: identifier 'INCORRECT_STATEMENT' must be declared
请注意您解析的内容:DDL将在解析(!)上执行。