由于thatjeffsmith好心指出,厚福这个错误在下一个版本中得到解决。在此之前,您可以使用SQLcl(SQLDeveloper 4.1.2中包含的现代SQL * Plus和SQLDeveloper 4.1.2使用的SQL * Plus)与SED脚本一起完成所需的结果。
SQLcl位于:$ SQLDEV_HOME \的SQLDeveloper \ BIN \ SQL。 $ SQLDEV_HOME只是您安装的SQLDeveloper版本的目录。
在您的例子,要生成两个独立的输出文件,A.TXT和B.txt,从一个单一的SQL文件。我下面提出的方法将要求将其分解为两个单独的SQL文件:A.sql和B.sql。
A.sql:
set echo off
set feedback off
set termout off
select /*csv*/ * from A where rownum <= 1000;
B.sql:
set echo off
set feedback off
set termout off
select /*csv*/ * from B where rownum <= 1000;
下面是我的一个名为sed脚本的一个在线内容 “中删除先空白line.sed”:
0,/^$/{//d}
“0”定义以下命令块只应用于第一行。
“/^$ /”定义了要匹配的正则表达式模式。 “^”是一行的开始,“$”是行标记的结尾,所以这种模式只匹配行,绝对没有内容,没有空格......没有。如果要删除可能包含空格(制表符,空格)的行,则可以尝试以下SED命令:0,/^[[:space:]] * $/{// d}
“ // d“定义脚本将删除找到的匹配模式。
有关此SED脚本的更多详细信息,请参阅:https://unix.stackexchange.com/questions/75424/remove-only-the-first-blank-line-sed。
因此,要从每个SQL文件(A.sql和B.sql)的输出中删除第一个空白行,它们必须分别使用SQLcl执行,然后必须通过以下SED脚本从SQLcl输出输出如下:
$SQLDEV_HOME\sqldeveloper\bin\sql -s scott/[email protected] @A.sql | sed -f remove-first-blank-line.sed > A.txt
$SQLDEV_HOME\sqldeveloper\bin\sql -s scott/[email protected] @B.sql | sed -f remove-first-blank-line.sed > B.txt
的“-s”是“沉默”选项SQLcl(SQL * Plus一样),从而确保没有数据库的登录信息输出到cluttter你的输出文件。
“|”字符管道通过给定的SED脚本从SQLcl输出。
“>”将SED脚本的所有输出写入输出文件“mysql.out”。如果您需要使用另一个SQL脚本将更多数据附加到同一文件,请使用“>>”,以便您可以将数据追加到文件而不是覆盖文件。
注意:是的,你也可以直接使用命令行上的SED命令,但这往往需要在逃避,这取决于你的操作系统运行在不同方式的特殊字符。我发现当我将SED命令保存在名为SED的简短脚本文件中时,我更有可能在各种平台(例如Linux和Windows)上重新使用我的SED脚本。
后处理可以。不幸的是,让SQL * Plus输出一个CSV文件似乎很难:http://stackoverflow.com/q/643137/238421。 –