我正在做这样的报告:
alter session set nls_date_format = 'DD-MON-YYYY HH24:MI:SS';
TTITLE CENTER 'Test_Repo' SKIP 1 -
CENTER ==================== SKIP 1 LEFT 'Report' -
RIGHT 'Data: &_DATE' SKIP 2
BTitle Center 'End of Report' SKIP 2 -
left 'end of date: &_DATE' -
drop table if exists 'Test_Repo';
create table Test_Repo nologging pctfree 0 parallel as
select id, status from table_1 where order like '721044%';
spool /tests/report.csv;
select ID || ';' || STATUS as "ID;STATUS" from Test_Repo;
spool off;
EXIT;
每个csv文件中的输出都不止一个。
任何人都可以帮助我吗?
答案 0 :(得分:0)
如果您的报告跨越多个页面,则会获得多个标题集。默认页面大小仅为24,因此如果您获得的行数超过少数,则会看到重复的标题。您可以set pagesize 0
使页面大小无限制;但是你失去了所有的标题和头衔。或者您可以set pagesize <some big number>
,但如果它太大,那么您会在数据和底部标题之间出现空白。
将纯文本报表标题元素与数据的分隔值格式混合有点奇怪,但如果您真的想要,则要么必须为pagesize选择一个大数字,要么先计算它用替换变量技巧:
set termout off
column x_pagesize new_value y_pagesize
select count(*) + 10 as x_pagesize
from (<your original query>);
set termout on
set pagesize &y_pagesize
...但这显然涉及两次运行您的查询,这可能太昂贵(或太慢)。
我能想到的唯一其他方法是set pagesize 0
,然后自己手动生成标题,如果您不想手动执行布局,请使用lpad()
计算布局在线大小(默认为80):
set pagesize 0
set tab off
set verify off
set feedback off
define page_width=80
define title_1='Test_Repo'
define title_2='===================='
define title_3a='Report'
define title_3b='Data: '
define title_4='End of Report'
define title_5='end of date: '
spool /tests/report.csv;
prompt
select lpad(' ', round((&page_width - length('&title_1'))/2))
|| '&title_1' from dual;
select lpad(' ', round((&page_width - length('&title_2'))/2))
|| '&title_2' from dual;
select '&title_3a'
|| lpad(' ', &page_width - (length('&title_3a') + length('&title_3b') + 20))
|| '&title_3b' || to_char(sysdate, 'DD-MON-YYYY HH24:MI:SS') from dual;
prompt
prompt ID;STATUS
select ID || ';' || STATUS as "ID;STATUS" from Test_Repo;
prompt
select lpad(' ', round((&page_width - length('&title_4'))/2))
|| '&title_4' from dual;
prompt
select '&title_5' || to_char(sysdate, 'DD-MON-YYYY HH24:MI:SS') from dual;
spool off;
prompt ID;STATUS
行会显示您的列标题,当页面大小为零时也不会显示。
这似乎与原始SQL * Plus命令生成相同的假ttitle和btitle。
您还可以使用prompt
来显示标题,但为了保留您需要将它们用引号括起来的间距,您可能不希望看到它们。虽然这取决于谁或将要看到什么,我想。
您可能还想set trimout on
,set termout off
和set trimspool off
。但那些都是细节......