在SQL(Oracle)中生成固定长度的源文件

时间:2016-04-05 15:03:12

标签: sql oracle

我收到了生成包含应用程序数据库中用户信息的固定长度Feed文件的要求 并与另一个系统共享该文件。

在固定长度中,已经告知每列的x字符长度后跟下一列 比如y字符长度等等,直到最后一列被提取。总行长度必须为2900.

我设法起草了一个类似于以下代码片段的SQL文件:

SET HEADING OFF
SET FEEDBACK OFF
SET VERIFY OFF
SET LINESIZE 2900
SET PAGESIZE 0

SPOOL user_feed.txt

SELECT extract_date
  || user_name
  || user_email
  || user_sys
  || user_grpname "USER_ROW"
FROM
  (SELECT RPAD(DECODE(extract_date,'',' ',trim(extract_date)),26) user_name,
    RPAD(DECODE(name,'',' ',trim(name)),50) user_name,
    RPAD(DECODE(email,'',' ',trim(email)),75) user_email,
    RPAD(DECODE(sys_name,'',' ',trim(sys_name)),10) user_sys,
    RPAD(DECODE(group_name,'',' ',trim(group_name)),26) user_grpname
    --....so on (picking all columns from below query)
  FROM
    (SELECT CAST(sysdate AS TIMESTAMP) extract_date,
      u.name,
      u.email,
      g.sys_name,
      g.group_name --(....so on)
    FROM user_tab u,
      user_grp g
    WHERE u.userid = g.userid
    )
  );

SPOOL OFF;

当我调整少量数据时会产生固定长度的文件,但是当源表包含大量行时,假脱机文件不会保留格式,数据会混合。

  1. 任何人都可以建议我如何克服这个问题?
  2. 除了可用于在Oracle中生成文件的假脱机之外还有其他方法吗?
  3. 感谢。

0 个答案:

没有答案