在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
答案 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
自动获取特定于平台的线路终结器。