SQL Plus更改当前目录

时间:2009-02-03 21:47:34

标签: oracle sqlplus

如何在Windows下更改SQL Plus中的当前目录。

我正在尝试用几个“@ filename”命令编写一个脚本。

我知道可以用文件打开脚本 - >打开命令,它将更改当前目录,但我正在寻找一种自动无人值守的方法。


分辨率

基于Plasmer的响应,我在Windows中设置了SQLPATH环境变量,并且得到了一些对我来说足够好的东西。我没有尝试使用HOST命令设置它(我怀疑它会起作用)。

Pourquoi Litytestdata的答案很好,但对我不起作用(目录相距太远)。当然盖伊回答说无法做到也是正确的。我将对这两个进行投票,并接受Plasmer的回答。

9 个答案:

答案 0 :(得分:20)

这就是我的工作。

定义一个变量来帮助你:

define dir=C:\MySYSTEM\PTR190\Tests\Test1

@&dir\myTest1.sql

您不能在SQL * Plus中cd(您可以使用host命令cd,但由于它是子进程,因此该设置将不会在您的父进程中保留)。

答案 1 :(得分:10)

我认为您不能在SQL * Plus中更改目录。

您可以使用@@filename而不是更改目录,而script1.sql会读入另一个脚本,该脚本的位置相对于当前脚本运行的目录。例如,如果您有两个脚本

C:\Foo\Bar\script1.sql
C:\Foo\Bar\Baz\script2.sql

然后script2.sql如果包含

行,则可以@@运行
@@Baz\script2.sql

有关{{1}}的详细信息,请参阅this

答案 2 :(得分:8)

您是否可以使用SQLPATH环境变量告诉sqlplus在哪里查找您尝试运行的脚本?我相信你也可以使用HOST在脚本中设置SQLPATH。

如果两个脚本具有相同的名称且两个目录都在SQLPATH中,则可能会出现问题。

答案 3 :(得分:3)

我认为你不能!

/home/export/user1 $ sqlplus / 
> @script1.sql
> HOST CD /home/export/user2
> @script2.sql

script2.sql必须位于/home/export/user1

您可以使用完整路径,也可以退出脚本并从右侧目录再次启动sqlplus

#!/bin/bash
oraenv .
cd /home/export/user1
sqlplus / @script1.sql
cd /home/export/user2
sqlplus / @script2.sql

(类似的东西 - 从记忆中做到这一点!)

答案 4 :(得分:2)

您是否尝试为sql plus创建Windows快捷方式并设置工作目录?

答案 5 :(得分:2)

我认为SQLPATH环境变量是最佳方式 - 如果您有多个路径,请用分号(;)分隔它们。请记住,如果目录中有相同名称的脚本文件,则会执行第一个(按顺序输入路径),第二个将被忽略。

答案 6 :(得分:1)

多年以后我遇到了同样的问题。我的解决方案是创建一个临时批处理文件和另一个sqlplus实例:

在第一个SQL脚本中:

:
set echo off
spool sqlsub_tmp.bat
prompt cd /D D:\some\dir
prompt sqlplus user/passwd@tnsname @second_script.sql
spool off
host sqlsub_tmp.bat
host del sqlsub_tmp.bat
:

请注意" second_script.sql"需要退出"退出"如果你想回到第一个,那么最后的陈述......

答案 7 :(得分:1)

使用Oracle的新SQLcl,现在有一个cd命令,随附pwd。 可以在此处下载SQLcl:http://www.oracle.com/technetwork/developer-tools/sqlcl/overview/index.html

这是一个简单的例子:

SQL>pwd
/Users/klrice/
NOT_SAFE>!ls *.sql
db_awr.sql  emp.sql     img.sql     jeff.sql    orclcode.sql    test.sql
db_info.sql fn.sql      iot.sql     login.sql   rmoug.sql

SQL>cd sql
SQL>!ls *.sql
003.sql             demo_worksheet_name.sql     poll_so_stats.sql
1.sql               dual.sql            print_updates.sql

SQL>

答案 8 :(得分:-2)

对我来说,shelling-out可以完成这项工作,因为它可以让你在shell上运行[a | any]命令:

http://www.dba-oracle.com/t_display_current_directory_sqlplus.htm

简而言之,请参阅当前目录:

!pwd

改变它

!cd /path/you/want