使用BASH从ORACLE数据库中读取包含多个空行的文件
可能重复:使用BASH从ORACLE数据库中读取包含多个空行的文件,oracle,bash,sqlplus,Oracle,Bash,Sqlplus,可能重复: 我尝试从数据库中读取并输出文本文件。它可以工作,但空行将被删除 例如: Hello Mr. X Text from Mailboddy Greetins Mr. Y 输出: Hello Mr. X Text from Mailboddy Greetins Mr. Y 代码: sqlplus-s$DBLOGIN假设将数据加载到CLOB中,换行符为CHR(13)| | CHR(10),并且如果直接从表中选择,您可以看到预期的格式,那么问题在于SQL*Plus如何与DBMS_输出
我尝试从数据库中读取并输出文本文件。它可以工作,但空行将被删除 例如:
Hello Mr. X
Text from Mailboddy
Greetins
Mr. Y
输出:
Hello Mr. X
Text from Mailboddy
Greetins
Mr. Y
代码:
sqlplus-s$DBLOGIN假设将数据加载到CLOB中,换行符为CHR(13)| | CHR(10)
,并且如果直接从表中选择,您可以看到预期的格式,那么问题在于SQL*Plus如何与DBMS_输出进行交互
默认情况下,将格式设置为WORD\u-WRAPPED
。文档中说“SQL*Plus左对齐每一行,跳过所有前导空格”,但没有注意到这也跳过了所有空行
如果将服务器输出设置为“格式包装”
或。。。截断
,然后将重新显示空行。但是,您需要确保您的行大小足够宽,可以打印最长的行,尤其是使用截断的
(此外,您的代码没有声明l\u pos NUMBER:=1
,并且缺少最终的DBMS\u输出。新的\u行
,因此您将丢失CLOB的最终行)
为了演示,如果我创建了一个仅包含CLOB列的虚拟表,并使用包含您要查找的回车/换行符的值填充它:
create table t42(text clob);
insert into t42 values ('Hello Mr. X' || CHR(13) || CHR(10)
|| CHR(13) || CHR(10)
|| 'Text from Mailboddy' || CHR(13) || CHR(10)
|| CHR(13) || CHR(10)
|| 'Greetins' || CHR(13) || CHR(10)
|| 'Mr. Y');
select * from t42;
我得到:
TEXT
--------------------------------------------------------------------------------
Hello Mr. X
Text from Mailboddy
Greetins
Mr. Y
使用您的过程(经过非常轻微的修改,可以运行):
如果我仅将代码中的一行更改为:
SET SERVEROUTPUT ON FORMAT WRAPPED;
然后文件现在包含:
Hello Mr. X
Text from Mailboddy
Greetins
Mr. Y
Hello Mr. X
Text from Mailboddy
Greetins
Mr. Y
您可能需要考虑这一点,而不是按照代码> BMSMultOuts,这取决于您的配置。类似的内容可能会给您一些提示。
问题类似于此:您需要删除空行,以便存储输出,然后使用cat文件| sed'/^$/d'获取最终结果。这实际上不是重复的;另一个问题是关于shell行为,这是关于Oracle的dbms\u输出如何工作的,与shell无关。非常感谢!这对我有用。
SET SERVEROUTPUT ON FORMAT WRAPPED;
Hello Mr. X
Text from Mailboddy
Greetins
Mr. Y