在PL/SQL中使用与在SQL中完全相同的命令以CSV形式获取查询结果

在PL/SQL中使用与在SQL中完全相同的命令以CSV形式获取查询结果,sql,oracle,csv,plsql,oracle11g,Sql,Oracle,Csv,Plsql,Oracle11g,我可以在Oracle中通过使用这个带有提示的简单查询以CSV的形式获得结果 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

我可以在Oracle中通过使用这个带有提示的简单查询以CSV的形式获得结果

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?

这个/*CSV*/hint是和它的兄弟SQLCl;并且在某种程度上被set-sqlformat-csv选项所取代

这不是乐观主义者能够识别的暗示;用加号表示,例如/*+完整…*/或者不太常见-+满

如果要在PL/SQL中创建输出,则需要自己构造字符串,添加双引号和分隔符。您可以让游标查询这样做,这样即使您有多个列,也可以选择一个字符串;或者使用一个“普通”查询,选择一个记录,并让PL/SQL在每个字段周围添加额外字符作为输出

使用utl_文件比使用dbms_输出更为正常,因为客户端可能没有启用utl_文件,但这当然会写入服务器上的目录。如果要在客户端上写入文件,则PL/SQL可能不合适或不必要

如果您需要在PL/SQL中对数据进行一些操作,那么另一个选项是使用集合类型和输出/绑定引用游标,然后让SQL开发人员将其打印为CSV。但你通常不想太拘泥于一个客户

这个/*csv*/hint是,它的兄弟SQLCl;并且在某种程度上被set-sqlformat-csv选项所取代

这不是乐观主义者能够识别的暗示;用加号表示,例如/*+完整…*/或者不太常见-+满

如果要在PL/SQL中创建输出,则需要自己构造字符串,添加双引号和分隔符。您可以让游标查询这样做,这样即使您有多个列,也可以选择一个字符串;或者使用一个“普通”查询,选择一个记录,并让PL/SQL在每个字段周围添加额外字符作为输出

使用utl_文件比使用dbms_输出更为正常,因为客户端可能没有启用utl_文件,但这当然会写入服务器上的目录。如果要在客户端上写入文件,则PL/SQL可能不合适或不必要


如果您需要在PL/SQL中对数据进行一些操作,那么另一个选项是使用集合类型和输出/绑定引用游标,然后让SQL开发人员将其打印为CSV。但你通常不想太拘泥于一个客户

可怜。谢谢你的回答!我想我会选择UTL_文件。谢谢你的回答!我想我会选择UTL_文件。