首先,这个问题与 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类似这样的文件:
scripts/runEverything.sql
@@/A/runAll.sql @@/B/runAll.sql
脚本/A/runAll.sql:
@@/A1.sql @@/A2.sql
"@@"我收集的where表示SQL * Plus中的相对路径。
"@@"
我自欺欺人地制造变量,但运气不佳。我已经能够使用'&1'和传递根目录来做类似的事情。即:scripts / runEverything.sql:
'&1'
@'&1/A/runAll.sql' '&1/A' @'&1/B/runAll.sql' '&1/B'
并通过执行以下命令调用它:
@'c:/.../scripts/runEverything.sql' 'c:/.../scripts'
但是这里的问题是B/runAll.sql使用path调用了c:/.../scripts/A/B。
B/runAll.sql
c:/.../scripts/A/B
那么, 使用SQL Developer 可以进行嵌套调用吗?如何进行?
此方法包含两个组件:
-将活动的SQL Developer工作表的文件夹设置为默认目录。
-打开驱动程序脚本,例如runAll.sql(然后将默认目录更改为活动目录),并使用runAll.sql脚本中的相对路径来调用同级脚本。
工具>首选项
在首选项对话框中,导航到“数据库”>“工作表”>“选择默认路径以查找脚本”。
输入默认路径以将脚本查找为活动工作目录:
“ $ {file.dir}”
runAll.sql
A1.sql
A2.sql
runAll.sql的内容将包括:
@ A1.sql;
@ A2.sql;
若要测试此方法,请在SQL Developer中单击“文件”,然后浏览并打开script \ runAll.sql文件。
接下来,选择所有(在工作表上),然后执行。
通过导航和打开runAll.sql工作表的操作,默认文件夹变为“脚本”。