2016-05-10 58 views
0

我有一個從網頁(基於Java構建)編輯Oracle過程定義並編譯它的場景。會有可能嗎?如果是這樣,請讓我知道你的想法。這些過程可能包含帶有select/update語句的簡單業務邏輯。從網頁上修改過程

在此先感謝。

回答

2

這似乎不是一個標準的要求,但是,你應該能夠做到這一點。要從您打算修改的數據庫中獲取存儲過程的代碼,可以使用以下命令。

SELECT text FROM user_source WHERE name = 'procedure_name'; 

現在,您可以在可編輯文本框中顯示此語句返回的行。一旦用戶執行更改,您現在可以調用數據庫中的存儲過程來接受字符串。存儲過程可以是這樣的。

CREATE OR REPLACE PROCEDURE compile_proc 
(
v_str IN VARCHAR2 
) 
IS 
BEGIN 
    EXECUTE IMMEDIATE 'CREATE OR REPLACE PROCEDURE ' || v_str; 
END; 
/

現在,您將不得不從您的網頁調用此存儲過程並傳遞字符串。我可以試着展示如何通過PLSQL完成。

DECLARE 
    v_proc_text VARCHAR2(30000); 
BEGIN 
    v_proc_text := 'sample_procedure AS 
        v_count NUMBER(1); 
       BEGIN 
        SELECT count(1) INTO v_count FROM dual; 
       END;'; 
    compile_proc (v_proc_text); 
END; 

不用說,你將不得不採取一切時,你會編譯更改可能拋出的語義和句法錯誤的照顧。您可以從Oracle獲取返回碼並將其顯示給用戶。

類似於您的需求的東西在Oracle apex雲上實現。您可以創建一個免費帳戶並查看。

https://apex.oracle.com/

+0

謝謝。我認爲這可能會幫助我挖掘更多。 –