PL / SQL代码验证无需执行

时间:2016-03-03 20:46:28

标签: oracle plsql

我希望能够仅使用PL / SQL验证一段代码是否正确。

例如,我在变量中有以下代码,我想验证它:

my_code:='BEGIN
           package1.get_wordlist_keywords_PG;
           package1.get_wordlist_keyword_cat_PG;
          END;
'

我想做点什么:

结果:= validate_code(my_code);

结果将是"有效"或"无效" (或有错误信息等)

我确信这是可能的,因为Oracle Apex允许用户输入PL / SQL并在保存时对代码运行验证。

我在Oracle 12c上。

谢谢!

P.S。 - 我不需要验证一个简单的sql select,它需要是一个PL / SQL代码块。

2 个答案:

答案 0 :(得分:1)

可能将您的代码放在过程而不是匿名块中。

CREATE OR REPLACE PROCEDURE p1 AS
BEGIN
  package1.get_wordlist_keywords_PG;
  package1.get_wordlist_keyword_cat_PG;
END;
/
show errors;

执行后,可能会成功创建或不成功创建过程。虽然程序创建成功,但程序中的代码 没有执行。

答案 1 :(得分:1)

CREATE OR REPLACE PROCEDURE VALIDATE_PLSQL 
(
  PLSQL IN VARCHAR2 
, MY_RESULT OUT VARCHAR2 
) AS 
 my_code varchar2(31900);
 validate_code varchar2(32000);
 status varchar2(4000);
BEGIN
  my_code:=PLSQL;
  validate_code:='create or replace procedure testp1 AS '||my_code;

  BEGIN
   status:='PASSED';
   EXECUTE IMMEDIATE validate_code;
  exception 
   when OTHERS then
   status:='FAILED';
  END;

  EXECUTE IMMEDIATE 'drop procedure testp1';

  MY_RESULT:=status;

END VALIDATE_PLSQL;

传入要在“PLSQL”中验证的块,将结果输入“MY_RESULT”

Clunky,但有效!