在Oracle SQL Developer中按相对路径执行脚本

时间:2014-06-02 20:22:43

标签: sql oracle oracle-sqldeveloper relative-path sql-scripts

首先,这个问题涉及 Oracle SQL Developer 3.2 ,而不是SQL * Plus或iSQL等。我已经做了很多搜索,但没有找到一个直接的答案

我有几个脚本集合,我试图自动化(顺便说一句,我的SQL体验非常基本,主要是基于MS的)。我遇到的麻烦是通过相对路径执行它们。例如,假设这个设置:

scripts/A/runAll.sql
       | /A1.sql
       | /A2.sql
       |
       /B/runAll.sql
         /B1.sql
         /B2.sql

我想要一个这样的文件scripts/runEverything.sql

@@/A/runAll.sql
@@/B/runAll.sql

脚本/ A / runAll.sql:

@@/A1.sql
@@/A2.sql

我收集的"@@"表示SQL * Plus中的相对路径。

我愚弄了制作变量,却没有多少运气。我已经能够使用'&1'执行类似的操作并传入根目录。即: 脚本/ runEverything.sql:

@'&1/A/runAll.sql' '&1/A'
@'&1/B/runAll.sql' '&1/B'

并通过执行以下方式调用它:

@'c:/.../scripts/runEverything.sql' 'c:/.../scripts'

但问题是B/runAll.sql使用路径调用c:/.../scripts/A/B

那么,使用SQL Developer 进行嵌套调用是否可能以及如何进行?

6 个答案:

答案 0 :(得分:11)

这种方法有两个组成部分:

- 将活动的SQL Developer工作表的文件夹设置为默认目录。

- 打开一个驱动程序脚本,例如runAll.sql,(然后将默认目录更改为活动目录),并使用runAll.sql脚本中的相对路径来调用兄弟脚本。

  1. 设置脚本默认文件夹。在SQL Developer工具栏上,使用此导航:

    工具>首

    在首选项对话框中,导航到数据库>工作表>选择默认路径以查找脚本。

    输入默认路径以查找脚本作为活动工作目录:

    “$ {file.dir}”

  2. 创建一个脚本文件并将所有相关的脚本放在其中:

    runAll.sql

    A1.sql

    A2.sql

    runAll.sql的内容包括:

    @ A1.sql;

    @ A2.sql;

  3. 要测试此方法,请在SQL Developer中单击File并导航并打开script \ runAll.sql文件。

    接下来,选择all(在工作表上),然后执行。

    通过导航和打开runAll.sql工作表的行为,默认文件夹变为“脚本”。

答案 1 :(得分:1)

我现在无法访问SQL Developer,所以我无法尝试相对路径,但是对于替换变量,我相信您遇到的问题是位置变量(每个&1start都会重新定义@}。因此,在您的第一个@runAll之后,父脚本看到的是与上一个孩子看到的相同的&1,现在包含/A

您可以通过在主脚本中定义自己的变量来避免这种情况:

define path=&1
@'&path/A/runAll.sql' '&path/A'
@'&path/B/runAll.sql' '&path/B'

只要runAll.sql,以及任何运行,也不会(重新定义)path,这应该有效,如果存在风险,您只需选择一个唯一的名称冲突。

我再也无法对此进行验证,但我确信过去我确实做到了这一点......

答案 2 :(得分:1)

你需要提供文件的路径为String,以双引号给出补丁它将起作用

**

例如     @“C:\ Users \ Arpan Saini \ Zions R2 \ Reports Statements and Notices \ Patch \ 08312017_Patch_16.2.3.17 \ DB Scripts \ snsp.sql”;

**

答案 3 :(得分:0)

这不是绝对或相对路径问题。这是SQL解释器问题,默认情况下它会查找具有.sql扩展名的文件。

请确保将文件名修改为file_name.sql

例如:如果工作空间的文件名称为“A”,则将文件从A移动到“A.sql”

答案 4 :(得分:0)

执行Sql

@yourPath\yourFileName.sql

答案 5 :(得分:0)

如何在文件中传递参数

@ A1.sql; (参数)

@ A2.sql; (参数)