我正在使用sqlplus并尝试导出table_x的列(近250列)。分享下面的代码: -
SET COLSEP ',' LINESIZE 32767 NUMWIDTH 18 LONG 4000 FEEDBACK OFF ECHO OFF
SET TRIMOUT ON ARRAYSIZE 5000 AUTOCOMMIT OFF FLUSH OFF HEADING ON TERMOUT OFF
SET PAUSE OFF SERVEROUTPUT ON TRIMSPOOL ON VERIFY OFF
SET UNDERLINE OFF PAGESIZE 50000 ESCAPE OFF
SET HEADING OFF FEEDBACK OFF
spool &spooldrive.&spooldir.table_x.csv
select /*csv*/
rtrim(xmlagg(XMLELEMENT(c,column_name||',').EXTRACT('//text()')
ORDER BY column_id).GetClobVal(),',')
FROM user_tab_cols where table_name = upper('table_x');
spool off;
我的输出是这样的: -
column1,column2,column3,colum
n4,column5,column6,column7,co
lumn8,column9...
似乎我错过了一些东西。有什么指针吗?
EDIT1: 当我添加 SET WRAP OFF 我在csv文件中的输出如下: -
column1,column2,column3,colum (yes i get only 4 columns)
EDIT2: 当我在同一个剧本中使用时:
select xmlagg(XMLELEMENT(e,column_name||',').EXTRACT('//text()')
ORDER BY column_id)
FROM user_tab_cols where table_name = upper('table_x');
我得到的列等于缓冲区长度(4000)。 很明显,如果查询的输出大于4000字节,则不会返回。有没有其他方法可以获得完整输出(甚至超过最大行大小限制4000)就像在导出到csv时在sql developer中完成一样?