将服务器输出假脱机到 CSV 文件中
Spooling Serveroutput into a CSV file
我的任务是更新一个相当大的文件,其中包含许多更新和删除语句。
首先要做的是检查哪些语句是实际需要/使用的。
我想把它放到一个单独的文件中,但是很难把它变成一个好的格式。
例如:
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
提前致谢!
您可以使用 SQL%ROWCOUNT
和以下 select 来实现您的要求
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
我的任务是更新一个相当大的文件,其中包含许多更新和删除语句。
首先要做的是检查哪些语句是实际需要/使用的。
我想把它放到一个单独的文件中,但是很难把它变成一个好的格式。
例如:
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
提前致谢!
您可以使用 SQL%ROWCOUNT
和以下 select 来实现您的要求
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