将服务器的输出转为CSV文件。

问题描述 投票:0回答:1

我接到的任务是更新一个比较大的文件,这个文件由很多更新和删除语句组成。

首先要检查哪些语句是真正需要使用的。

我想把这些内容卷成一个单独的文件,但很难把它弄成一个漂亮的格式。

比如说

set serveroutput on
spool xxx.csv

update xx set yy where a = b;

创建一个像这样的文件: sql: update xx..:

sql: update xx.....

更新了1100行。

最接近我想要的输出是使用类似这样的文件。

spool xxx.csv

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

这将工作得很好(除了多行查询),但它需要我重写所有的更新删除语句,有很多。

有谁知道我怎么解决这个问题的最好方法吗?最好的结果是一个像这样的文件。

Query            Count
update xx ...    1100

先谢谢你!

sql sqlplus spool
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.