我们如何逐行打印字符并将其保存到PLSQL中的csv或文本文件中

-5 sql plsql plsqldeveloper

  1. 宣布
  2. V_NUMBER NUMBER:= 23;
  3. 开始
  4. 环
  5. V_NUMBER:= V_NUMBER + 1;
  6. 退出时V_NUMBER:= 25;
  7. - 用于打印和将行嵌套到CSV或TEXT文件中的一些功能.
  8. 结束循环;
  9. 承诺;
  10. 结束;

Ric*_*ual 12

编写用于创建CSV或文本类型文件输出的Oracle SQL查询脚本

考虑从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列,则在输出字符串中添加另一个元素主要是剪切和粘贴操作.与"标题"行(列标题)类似.