我正在尝试编写一个将表格输出到 CSV 的脚本。棘手的部分是让输出只显示一次标题。下面的脚本根本不显示标题。我们使用的另一个选项是设置pagesize
极高。这也是非常成问题的。
set colsep |
set pagesize 0
set trimspool on
set linesize 10000
spool table1.csv
SELECT host_name from v$instance;
select to_char(sysdate, 'Dy DD-Mon-YYYY HH24:MI:SS') as "CURRENT TIME" from dual;
prompt ================================================
prompt TABLE 1
prompt SELECT * FROM tbl1;
prompt ================================================
SELECT * FROM tbl1;
spool off
为了清楚起见: 我没有直接访问数据库的权限。我会将脚本传递给 DBA 以针对数据库运行,因此 PL/SQL 或任何比非常基本的脚本更高级的东西可能不是一个选项。也正因为如此,我希望列标题只显示一次,无论表中有 10 条还是 1000 万条记录。这将为我提供我需要的数据的合理描述,并在分析数据之前最大限度地减少清理工作。
您可以运行两个查询 - 第一个从 user_tables 中提取 tbl1 中的字段名称列表,然后第二个查询从 tbl1 中提取实际数据?假脱机所有到同一个文件。没有要测试的正在运行的 Oracle 实例,但这可能是您问题的解决方案?消除了对 PL/SQL 的需求——尽管我看不出运行 shell 脚本和简单的 PL/SQL 脚本之间的区别。