将服务器输出假脱机到CSV文件中

时间:2020-04-23 10:11:31

标签: oracle sqlplus spool

我的任务是更新包含许多update和delete语句的相当大的文件。

首先要检查的是,实际上需要/使用哪些语句。

我想将其假脱机到一个单独的文件中,但是很难将其转换成一个不错的格式。

例如:

set serveroutput on
spool xxx.csv

update xx set yy where a = b;

创建如下文件:

sql:更新xx .....

已更新1100行。

我与期望的输出最接近的是使用类似的东西:

spool xxx.csv

select 'update xx set yy where a = b;' query, count(x) count from xx where (update where clause)

这几乎可以很好地工作(多行查询除外),但是这需要我重写所有的update / delete语句,而且还有很多。

有人知道我如何才能最好地解决这个问题吗? 最好的结果是这样的文件:

Query            Count
update xx ...    1100

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用SQL%ROWCOUNT和下面的选项来满足您的要求

    DECLARE
      l_sql_text  VARCHAR2(32767);
      l_sql_count NUMBER;
    BEGIN
      insert into tttt values(4);

      l_sql_count:= SQL%rowcount;
      SELECT
             (
                    SELECT t2.sql_fulltext
                    FROM   v$sql t2
                    WHERE  t1.prev_sql_id = t2.sql_id
                    AND    t1.prev_child_number = t2.child_number ) prev_sql_fulltext
      INTO   l_sql_text
      FROM   v$session t1
      WHERE  t1.audsid = Sys_context('userenv', 'sessionid');

      dbms_output.put_line('Query,Count');

      dbms_output.Put_line(l_sql_text
      ||','
      ||l_sql_count);
    END;

输出

Query,Count
INSERT INTO TTTT VALUES(4),1
相关问题