2016-03-03 73 views
2

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

例如,我有一个可变下面的代码,我想验证它:

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

我想这样做:

结果:= validate_code(my_code);

和结果将是“有效”或“无效”(或错误信息等)

我相信这将是可能的,因为甲骨文的Apex允许用户输入PL/SQL和运行的有效性上保存时的代码。

我在Oracle 12c上。

谢谢!

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

回答

1

可能把你的代码放在一个程序而不是匿名块中。

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

执行后,程序可能成功也可能不成功。虽然该过程已成功创建,但程序 中的代码未执行。

+0

谢谢 - 把它变成这个,它让我验证我需要什么... –

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”

笨重的验证,但工程!