我正在制作一个调用 sql*plus 脚本的 PS 脚本,然后通过邮件发送文件。
然而问题是在 CSV 中导出的结果在最后一列被截断,因为它是一个 xml 并且每个标记之间有一个换行符
在 Oracle SQL 上,结果在一行中。
在只有这些作为选项的 csv 中:
SET lines 2500;
SET pages 1;
假脱机文件在“信息”列的输出如下所示:
'<?xml version='1.0' encoding='UTF-8'?>
<error_response>
<id>8cad0277-3a60-4cfd-a9c4-c272f69038ce</id>
<timestamp>2023-03-23T09:25:03.001Z</timestamp>
<error_lang>EN</error_lang>
<error_type>MULE:UNKNOWN</error_type>
<error_code>520</error_code>
<error_msg>
现在我想要的是所有内容都在一行中
我已经尝试了好几样东西,但它会截断到
520 - '<?xml version='1.0' encoding='UTF-8'?>
这是我尝试过的所有东西:
SET Wrap OFF;
SET Longchunksize 90000;
SET Pagesize 0;
SET lin[esize] 5000;
SET TrimSpool ON;
SET long 2000000;
SET lines 32737;
column info format a120
没有工作仍然被截断为 520 xml 我怎样才能得到信息栏中包含的所有数据?
换行符在您的数据中,SQL*Plus 没有添加它们。您需要用一些不能出现在您的数据中的特殊字符替换换行符,然后一旦您将数据到达其最终目的地,用换行符替换它们以恢复格式化的外观。
我喜欢使用没人见过的非打印控制字符:
提取后:
SELECT REPLACE(info,CHR(10),CHR(21)) info
FROM ...
在最终目的地:
INSERT INTO target
SELECT REPLACE(info,CHR(21),CHR(10))
FROM ...
还要确保你将 linesize 设置得非常大,你有。