2016-03-03 72 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」

笨重的驗證,但工程!