PL/SQL代码验证但不执行

3
我希望能够仅使用PL/SQL来验证代码的正确性。例如,我有以下代码存储在一个变量中,我想要验证它:
my_code:='BEGIN
           package1.get_wordlist_keywords_PG;
           package1.get_wordlist_keyword_cat_PG;
          END;
'

我想要做类似以下的事情:
result:=validate_code(my_code);
然后result会是"valid"或者"invalid"(或者带有错误信息等)。我相信这是可能的,因为Oracle Apex允许用户输入PL/SQL并在保存时对代码进行验证。我使用的是Oracle 12c。
谢谢!
注:我不需要验证一个简单的SQL查询语句,它需要是一个PL/SQL代码块。
2个回答

1

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

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

执行完成后,该过程可能会成功创建,也可能不会。虽然过程成功创建,但过程内部的代码并没有被执行。


谢谢 - 我已经将它转化为这个,这让我能够验证我所需要的内容... - A Sims

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”中获取结果。
笨拙,但有效!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接