【问题标题】:Spooling Serveroutput into a CSV file将服务器输出假脱机到 CSV 文件中
【发布时间】:2020-08-06 14:58:59
【问题描述】:

我的任务是更新一个包含许多更新和删除语句的相当大的文件。

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

我想把它放到一个单独的文件中,但是很难把它变成一个好的格式。

例如:

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)

这会很好用(多行查询除外),但它需要我重写所有更新/删除语句,而且有很多。

有谁知道我该如何以最好的方式解决这个问题? 最好的结果是这样的文件:

Query            Count
update xx ...    1100

提前致谢!

【问题讨论】:

    标签: oracle sqlplus spool


    【解决方案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
    

    【讨论】:

    • 嘿,谢谢!这似乎应该工作。实际上,我现在决定使用 Python 来帮助我处理输出。对我来说,这是更简单、更直接的方法。
    猜你喜欢
    • 2021-10-11
    • 2021-09-29
    • 2021-07-13
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多