2016-06-07 25 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

相关问题