【发布时间】:2014-05-22 13:50:00
【问题描述】:
我正在尝试将 Oracle 表导出到文本文件。我有这个工作,但我还需要在导出结束后将文本文件从一个位置复制到另一个位置。在 SELECT 语句之后,如何从 SQL> 提示返回到 C:\ 提示?
我有一个批处理文件 select.bat,它是这样做的:
echo @d:\users\myusername\desktop\sqlscript.sql | sqlplus mylogin/mypassword
而 sqlscript.sql 看起来像这样:
set colsep ,
set pagesize 0
set trimspool on
set headsep off
set linesize 9999
spool d:\users\myusername\desktop\tablename.csv
select * from tablename;
spool off
我运行批处理文件,一切正常。如何添加如下行:
move d:\users\myusername\desktop\tablename.csv "\\server\share\myfolder\"
在 .bat 文件中还是在 .sql 文件中?
谢谢!
更新:
我把批处理文件改成这样:
start cmd.exe /k "sqlplus mylogin/mypassword @d:\users\myusername\desktop\sqlscript.sql & move /y d:\users\jjb4211\desktop\tablename.csv \\servername\sharename\myfolder & exit"
在 SQl 文件中,我在spool off 之后添加了exit
所以现在我可以运行 .bat 文件,它会打开一个新的命令提示符,连接到 Oracle,将表假脱机到一个文本文件,将文本文件移动到网络,然后退出。
【问题讨论】:
-
我认为您需要将
exit添加到 SQL 脚本中。然后你的批处理文件应该在调用 SQL*Plus 后继续 -
@a_horse_with_no_name - 我尝试在
spool off行之后添加exit,但它关闭了命令提示符窗口(而不是仅仅退出 sqlplus 并返回到 c:)。 -
好吧,如果您双击批处理文件,那么这是预期的行为:一旦批处理文件完成,命令行窗口将关闭,除非您通过在批处理文件中手动键入其名称来启动批处理文件命令行。
-
这是有道理的。我将该批处理文件更改为
start cmd.exe /K "echo @d:\users\myusername\desktop\sqlscript.sql | sqlplus mylogin/mypassword",并在SQL 脚本中将exit添加到末尾。这将运行 SQL 脚本并在之后保持命令提示符窗口打开。现在我只需要在exit行之后添加我的Move语句,我想我会设置好的。谢谢!如果您想发布您的 cmets 作为答案,我会继续接受它。 -
move语句需要进入 .bat 文件(在调用 sqlplus 之后)而不是进入 SQL 脚本
标签: oracle batch-file sqlplus