Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用BASH从ORACLE数据库中读取包含多个空行的文件_Oracle_Bash_Sqlplus - Fatal编程技术网

使用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