SQLPlus Spool CSV 在列中添加新行

SQLPlus Spool CSV adding new line in columns

我需要你的帮助来将 SQL 输出假脱机为格式化的 CSV 下面是生成结果的查询 -

set linesize 800
set pagesize 0 embedded ON
set underline off
col USERNAME format A12
COL USER_ID HEADING 'ID'
col USER_ID format 999
COL PASSWORD HEADING 'PWD'
col PASSWORD format a03
col ACCOUNT_STATUS format a18
col DEFAULT_TABLESPACE format a9
col DEFAULT_TABLESPACE heading 'DEF_TBS'
col TEMPORARY_TABLESPACE format a7
col TEMPORARY_TABLESPACE heading 'TMP_TBS'
col profile format a8
col INITIAL_RSRC_CONSUMER_GROUP format a22
col INITIAL_RSRC_CONSUMER_GROUP heading 'INIT_RSRC_CONSUMER_GRP'
col EXTERNAL_NAME heading 'EXT_NAME'
col EXTERNAL_NAME format a2
col EXPIRY_DATE heading 'EXP_DATE'
col PASSWORD_VERSIONS heading 'PWD_VERS'

set flush off
set echo off
set term off
set colsep ';'
set trimspool on

SELECT
  u.username, u.user_id, u.account_status, u.created, u.lock_date, u.profile,
  MAX(DECODE (up.resource_name, 'FAILED_LOGIN_ATTEMPTS', up.limit, '')) FAILED_LOGIN_ATTEMPTS,
  MAX(DECODE (up.resource_name, 'PASSWORD_REUSE_TIME', up.limit, '')) PASSWORD_REUSE_TIME,
  MAX(DECODE (up.resource_name, 'PASSWORD_VERIFY_FUNCTION', up.limit, '')) PASSWORD_VERIFY_FUNCTION,
  MAX(DECODE (up.resource_name, 'PASSWORD_LOCK_TIME', up.limit, '')) PASSWORD_LOCK_TIME,
  MAX(DECODE (up.resource_name, 'PASSWORD_REUSE_MAX', up.limit, '')) PASSWORD_REUSE_MAX,
  MAX(DECODE (up.resource_name, 'PASSWORD_GRACE_TIME', up.limit, '')) PASSWORD_GRACE_TIME,
  MAX(DECODE (up.resource_name, 'PASSWORD_LIFE_TIME', up.limit, '')) PASSWORD_LIFE_TIME
FROM dba_users u
INNER JOIN (SELECT p.profile, p.resource_name, DECODE(p.limit, 'DEFAULT', pd.limit, p.limit) limit
            FROM dba_profiles p
            LEFT JOIN dba_profiles pd ON p.resource_name = pd.resource_name AND p.resource_type = pd.resource_type AND pd.profile = 'DEFAULT'
            WHERE p.resource_type = 'PASSWORD') up ON u.profile = up.profile
GROUP BY u.username, u.user_id, u.account_status, u.created, u.lock_date, u.profile;

上面的代码在 csv 下产生 - 这里的列在换行符而不是单个 rwo header,这不是预期的。

USERNAME    ;  ID;ACCOUNT_STATUS    ;CREATED  ;LOCK_DATE;PROFILE ;FAILED_LOGIN_ATTEMPTS                                                                                                           ;PASSWORD_REUSE_TIME                                                                                                             ;PASSWORD_VERIFY_FUNCTION
PASSWORD_LOCK_TIME                                                                                                              ;PASSWORD_REUSE_MAX                                                                                                              ;PASSWORD_GRACE_TIME
PASSWORD_LIFE_TIME

预期结果是 -

附加以下参数后,CSV 假脱机以正确对齐的方式恢复

col USERNAME for a25
col FAILED_LOGIN_ATTEMPTS for a25
col PASSWORD_VERIFY_FUNCTION for a25
col PASSWORD_REUSE_MAX for a25
col PASSWORD_LIFE_TIME for a25
col PASSWORD_LOCK_TIME for a25
col PASSWORD_GRACE_TIME for a25
col PROFILE for a18
col PASSWORD_REUSE_TIME for a25