代码之家  ›  专栏  ›  技术社区  ›  Andrew Stein

SQL Plus更改当前目录

  •  13
  • Andrew Stein  · 技术社区  · 16 年前

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

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

    我知道您可以使用文件--gt;open命令打开一个脚本,这将更改当前目录,但我正在寻找一种自动无人参与的方式。


    分辨率

    基于Plasmar的响应,我在Windows中设置了sqlpath环境变量,得到了一些对我来说足够好的东西。我没有尝试用主机命令设置它(我怀疑它是否能工作)。

    PourquoiLitytestData的答案很好,但对我来说不起作用(目录之间的距离太远)。当然,盖伊的答案是不可能做到的,也是正确的。我将投票决定这两个,并接受施莱默的回答。

    9 回复  |  直到 16 年前
        1
  •  8
  •   Plasmer    16 年前

    可以使用sqlpath环境变量告诉sqlplus在哪里查找要运行的脚本吗?我相信您也可以使用主机在脚本中设置sqlpath。

    如果两个脚本具有相同的名称,并且两个目录都在sqlpath中,则可能存在问题。

        2
  •  20
  •   Dzyann    9 年前

    这是我的工作。

    定义一个变量以帮助您:

    define dir=C:\MySYSTEM\PTR190\Tests\Test1
    
    @&dir\myTest1.sql
    

    你不能 cd 在SQL*PLUS中(您可以 光盘 使用主机命令,但由于它是子进程,因此该设置不会在父进程中持久存在)。

        3
  •  10
  •   Luke Woodward    16 年前

    我认为您不能更改SQL*PLUS中的目录。

    您可以使用 @@filename ,它读取另一个脚本,该脚本的位置相对于当前脚本运行的目录。例如,如果您有两个脚本

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

    然后 script1.sql 可以运行 script2.sql 如果它包含行

    @@Baz\script2.sql
    

    this 有关更多信息 @@ .

        4
  •  3
  •   Guy    6 年前

    我觉得你做不到!

    /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
    

    (就像这样——从记忆中做这个!)

        5
  •  2
  •   Chetan S    16 年前

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

        6
  •  2
  •   eRick    8 年前

    我认为sqlpath环境变量是实现这一点的最佳方法-如果有多条路径,请输入以分号(;)分隔的路径。请记住,如果目录中有名为相同的脚本文件,则将执行遇到的第一个文件(按输入路径的顺序),而忽略第二个文件。

        7
  •  1
  •   IOIO    8 年前

    几年后,我也遇到了同样的问题。我的解决方案是创建一个临时批处理文件和另一个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”如果要返回到第一个语句,则在末尾需要一个“exit”语句。

        8
  •  1
  •   Kris Rice    6 年前

    在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>
    
        9
  •  -2
  •   Dirk Schumacher    7 年前

    对于我来说,shell out执行该任务是因为它可以在shell上运行[a any]命令:

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

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

    !pwd

    改变它

    !cd /path/you/want