Ric*_*ual 12
考虑从SQL Plus会话运行此SPOOL命令并使用该命令.随后的SQL命令的所有输出都将写入您指定的文件名.
如果需要在每次运行SQL命令时附加结果,那么在调用此PL/SQL的sqlplus可执行块时,OS级别命令将正常工作:
此脚本的文件名为:"sample_csv_out.sql"
DECLARE
v_total_columns constant number:= 3; -- Number of columns queried
v_column_counter number;
v_csv_record varchar2(1000);
c_csv_column_format constant varchar2(15):=
'<<COLUMN1_VAL>>,<<COLUMN2_VAL>>,<<COLUMN3_VAL>>';
cursor result_cur is
SELECT column1, column2, column3
FROM tablea
WHERE column1 = ... ;
BEGIN
v_csv_record:= 'COLUMN1,COLUMN2,COLUMN3';
dbms_output.put_line (v_csv_record);
FOR i in result_cur LOOP
v_csv_record:= replace(c_csv_column_format, '<<COLUMN1_VAL>>', i.column1);
v_csv_record:= replace(v_csv_record, '<<COLUMN2_VAL>>', i.column2);
v_csv_record:= replace(c_csv_record, '<<COLUMN3_VAL>>', i.column3);
dbms_output.put_line(v_csv_record);
END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)
因此,例如在WINDOWS O/S环境中,将输出附加到特定文件名的调用将是:
C:\> sqlplus sample_csv_out.sql >> mycsv_out.csv
Run Code Online (Sandbox Code Playgroud)
该>>表示法指示操作系统sample_csv_out.sql通过sqlplus会话管道运行的输出.
该命令DBMS_OUTPUT完成剩下的工作.如果您需要更多详细信息,请参阅有关DBMS_OUTPUT的更多Oracle文档.
评论: 我选择了这种RECORD STRING TEMPLATE方法使这个脚本更灵活和可重用.我建议在CURSOR语句中保留任何数据操作逻辑.通常当两者混合时,在一长串值中调试语法中的任何拼写错误变得更加困难.
输出记录的构造也旨在减少拼写错误和错误...如果您自己的脚本中有超过3列,则在输出字符串中添加另一个元素主要是剪切和粘贴操作.与"标题"行(列标题)类似.
| 归档时间: |
|
| 查看次数: |
485 次 |
| 最近记录: |