Oracle:将固定长度文件样式输出保存到变量

时间:2016-11-04 23:37:28

标签: sql oracle

在Oracle函数中,我试图返回一个包含将写入文件的部分的CLOB。 我需要从我的select语句中获取行并填充值(我得到如何使用LPAD来执行此操作)并在结果中使每一行成为一行

所以,如果我有一张表格如下:

col1  col2  col3
this  is    data
and   a     gain
b           b

我通过我的功能运行它:

FUNCTION create_file_section() RETURN CLOB IS
BEGIN

  --SELECT col1, col2, col3 values from table and LPAD them and concat them together,

END;

我得到的输出就像(假设我要填充到4个字符):

this00isdata
0and000again
000b0000000b

1 个答案:

答案 0 :(得分:1)

假设每个填充行少于4000个字符,您可以将填充和连接作为查询的一部分。然后,您需要遍历结果集并将每行附加到CLOB。类似的东西:

FUNCTION create_file_section() RETURN CLOB IS
  l_clob CLOB;
BEGIN
  dbms_lob.createtemporay(l_clob, false);
  for r in (
    select lpad(col1, 4, '0') || lpad(col2, 4, '0')
      || lpad(col3, 4, '0') || chr(10) as values
    from your_table
  )
  loop
    dbms_lob.append(l_clob, r.values);
  end loop;

  return l_clob;
END create_file_section;
/

我在连接值中包含换行符,但如果您愿意,可以在追加中执行此操作。您可能还需要回车,具体取决于您的平台。

如果你打算在某个时候将它写入文件,那么将它放在一个中间CLOB中可能就没有必要了 - 直接从查询中直接写入循环中的文件会更简单;这也可以让您通过utl_file.new_line自动获取特定于平台的线路终结器。