2016-06-07 24 views
1

通過使用帶有提示的簡單查詢,我能夠在Oracle中以CSV格式獲得結果。使用與SQL中的命令完全相同的命令在PL/SQL中獲取查詢結果

SELECT /*csv*/ * FROM dual; 

這將返回

"DUMMY" 
"X" 

現在我想爲了不推倒重來使用完全相同的提示在PL/SQL。

SET SERVEROUTPUT ON; 
declare 
    cur sys_refcursor; 
    csv_line varchar2(4000); 
begin 
    open cur for select /*csv*/ * from dual; 
    loop 
    fetch cur into csv_line; 
    exit when cur%NOTFOUND; 
    dbms_output.put_line(csv_line); 
    end loop; 
    close cur; 
end; 

不幸的是這僅打印

X 

這似乎忽視了提示。

任何方式做到這一點很簡單,或者我必須編寫一段特殊的代碼導出爲CSV數據?

回答

5

/*csv*/提示是specific to SQL Developer和它的兄弟SQLC1;並且有些被set sqlformat csv選項取代。

這不是優化器認可的提示;那些由加號表示,例如, /*+ full(...) */或更少,通常爲--+ full(...)

如果您在PL/SQL中創建輸出,則需要自己構造字符串,添加雙引號和分隔符。你可以讓遊標查詢這樣做,這樣即使你有多個列,你也可以選擇一個字符串;或者有一個'正常'的查詢來選擇一條記錄,並且PL/SQL在輸出時在每個字段周圍添加額外的字符。

使用utl_filedbms_output更爲正常,因爲客戶端可能沒有啓用該功能,但當然可以寫入服務器上的目錄。如果您正在寫入客戶端上的文件,那麼PL/SQL可能不適合或不必要。

如果您需要對PL/SQL中的數據進行一些操作,那麼另一種選擇是使用集合類型並使用輸出/綁定引用遊標,然後讓SQL Developer將其打印爲CSV。但是你通常不希望被捆綁到一個客戶端。

+0

可惜。儘管謝謝你的回答!我想我會用'UTL_FILE'去。 – Jagger

相關問題