2012-11-16 36 views
0

我已經寫了一個plsql腳本。該腳本根據某些標準從多個表中提取數據,並將數據格式化爲逗號分隔格式。現在獲取的數據在行數和行大小方面都很大。我想在csv文件中的數據。 我曾嘗試做以下事情:如何在oracle中通過oracle或其他方式獲取查詢輸出到csv文件

  1. 使用spool和DBMS_OUTPUT.PUT_LINE。 DBMS_OUTPUT.ENABLE只有20000字節的限制,所以我的記錄出現在假脫機文件的一半。
  2. 使用utl_file我能夠得到它在一個csv文件,但問題是我的數據庫駐留在一些其他機器(物理),我的應用程序駐留在其他機器上。所以當我發射plsql腳本時,它正在數據庫機器上創建該文件。 utl_file也需要在數據庫機器上創建目錄對象,這對我來說很快就是一個安全問題。

是否有無論如何,我可以管plsql腳本輸出到位於我的應用程序機器(而不是我的數據庫機器)上的文件。 您也可以建議一些其他編程語言的解決方案太像Java等

回答

0

您有幾種選擇:

  1. 有一個可選的參數dbms_output.enable - 緩衝區大小 。默認爲20,000,最大允許數量爲 1,000,000(Oracle 9i-11g)。 dbms_output.enable(1000000);

  2. 如果這還不夠空間,那麼你可能需要在運行PL/SQL塊,僅輸出所需輸出的一大塊一次。
  3. 你可以將你的PL/SQL塊重寫爲SQL查詢嗎?然後,如果你用sqlplus,您可以運行此命令,使您的輸出逗號分隔:

    set colsep ","

...然後利用閥芯和執行查詢。

+0

嘿,我已經嘗試了你說什麼:我做的是,而不是把它dbms_output我將所提取的值存儲到全局臨時表。然後我打開線軸,將列分隔符設置爲逗號,在該臨時表中啓動一個選擇查詢,然後關閉線軸。假脫機文件是空白的。 我哪裏出錯了? –

+0

通常當我得到一個空白的假脫機文件時,我忘了在我的腳本結尾處添加一個「假脫機」,但你提到你關閉假脫機程序。請發佈執行假脫機和查詢的腳本。 – rgettman

+0

DECLARE - 有些光標塊來從 BEGIN --modified的PLSQL塊格式化輸出,並插入到臨時表 插入到通知的值(/ *提取的記錄被插入到該臨時表的多個表中的記錄*/); END LOOP; END LOOP; END; / set colsep「,」; 設置行數1000000; 設置頁面大小10000; 設置回聲關閉; 設置反饋關閉; 設置trimspool; 設置標題關閉; spool file1.csv; 從通知中選擇column_names; 假脫機; 感謝您的快速回復 –

相關問題