首先,这个问题与 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 是否可以进行嵌套调用,以及如何进行?
原文由 Didjit 发布,翻译遵循 CC BY-SA 4.0 许可协议
这种方法有两个组成部分:
- 将活动 SQL Developer 工作表的文件夹设置为默认目录。
- 打开一个驱动程序脚本,例如runAll.sql,(然后将默认目录更改为活动工作目录),并使用runAll.sql 脚本中的相对路径来调用同级脚本。
工具 > 首选项
在首选项对话框中,导航到数据库 > 工作表 > 选择默认路径以查找脚本。
输入默认路径以查找脚本作为活动工作目录:
创建一个脚本文件并将所有关联的脚本放入其中:
runAll.sql
A1.sql
A2.sql
runAll.sql 的内容将包括:
要测试此方法,请在 SQL Developer 中单击文件并导航并打开 script\runAll.sql 文件。
接下来,全选(在工作表上),然后执行。
通过导航和打开runAll.sql 工作表的行为,默认文件夹变为“脚本”。