2013-01-08 133 views
0

我有6個測試環境和1個生產環境。我創建了許多與Oracle視圖不同的報告,並且需要一種方法來在不同環境之間同步這些報告。將select語句插入表中 - ORA-06502

我想製作一個腳本,我可以運行,它將基本上輸出一個命令列表,我可以將其複製並粘貼到我的不同環境中以創建必要的視圖/公共同義詞和特權。

我必須把結果文本放到數據庫表中,因爲dbms_output.put_line對它顯示的字符數有一定的限制。

我有以下,但如果我嘗試插入數據,我得到ORA-06502: PL/SQL: numeric or value error。我猜這可能與字符文字沒有被轉義和不是什麼有關。

CREATE OR REPLACE PROCEDURE EXPORT_REPORTS AS 
    statements CLOB; 
    tmp_statement CLOB; 


    CURSOR all_views IS 
    SELECT 
     OWNER, 
     VIEW_NAME, 
     TEXT 
    FROM 
     ALL_VIEWS 
    WHERE 
     OWNER = 'PAS' 
    ; 
BEGIN 
    FOR v IN all_views LOOP 
    tmp_statement := 'CREATE OR REPLACE FORCE VIEW "' || v.OWNER || '"."' || v.VIEW_NAME || '" AS ' || CHR(13) || CHR(10) || v.TEXT; 
    statements := statements || tmp_statement; 
    END LOOP; 
    EXECUTE IMMEDIATE 'INSERT INTO VIEW_EXPORTS VALUES ('''|| statements || ''')'; 
END EXPORT_REPORTS; 

任何想法我能做些什麼來嘗試解決這個問題? 如果這是因爲statements變量中的某些文本包含單引號,那麼在將數據插入表之前,如何轉義該引號?

回答

-1

您不能將CLOB用作局部變量的數據類型。使用VARCHAR代替

+0

不正確。我已經使用CLOB工作。我只是將插入語句從「EXECUTE IMMEDIATE」更改爲「INSERT INTO ...」 – Lock