验证plsql块

时间:2012-02-15 09:42:45

标签: java oracle plsql antlr

我正在准备一个屏幕,用户将在其中输入plsql的匿名块(声明...开始......结束),并且我将它的块保存到文件中,并在必要时运行它。 但我想在执行之前验证用户对我的数据库的输入是否有语法错误。当我用谷歌搜索它时,我发现我可以使用antlr,但我找不到任何可用的样本。任何人都可以向我展示一个示例,我对java和plsql上下文中的其他解决方案持开放态度。

1 个答案:

答案 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将在解析(!)上执行。