6

当我有两个 sql 文件时,其中一个在子目录中

main_test.sql
sub/sub_test.sql

sub_test.sql调用@../main_test.sql(或@@../main_test.sql)然后从子目录执行它时工作正常

sub> sqlplus xxx @ sub_test.sql

但是当我打电话

sub> cd ..
> sqlplus xxx @ sub/sub_test.sql

这导致

SP2-0310: unable to open file "../main_test.sql"

因为路径是从我的工作目录评估的,而不是我调用的 sql 文件的目录。

有没有办法使用从包含调用的文件目录开始的相对路径?

4

3 回答 3

3

遗憾的是不支持“文件”网址 - 因为这在使用“http://”路径时效果很好!

我设置了 'sub_test\sub_test.sql' 来包含双重属性:

@@../main.sql

将整个目录结构放在 Tomcat webapps/ROOT 上下文中,如果你这样调用它就可以工作:

SQL> @http://host:port/sub_test/sub_test.sql

我猜设置网络服务器可能有点矫枉过正?(显然也适用于 FTP - 没有尝试过)。

于 2009-12-15T15:34:34.507 回答
1

恐怕我不知道实现这一点的方法,但它确实说明了这种托管脚本方法的一个问题。

我记得当我在 v7.1 中开始使用 Oracle 时。不管我们几乎什么都会使用脚本,但是有很多任务只能通过外部脚本来完成,你不妨将它们用于所有事情。但是我认为每个版本都没有这样做的理由,而我现在唯一的理由是使用 11g 重构为 pl/sql。

于 2009-12-15T12:19:19.580 回答
1

(在我看来,带有 SP2-0310 错误的行中的文件名输入错误。我相信您要指示的文件是“../main_test.sql”,我将沿着该行继续)。

如果您在包含 main_test.sql 的目录中并执行 sub/sub_test.sql,并且在 sub/sub_test.sql 中调用 main_test.sql 作为“../main_test.sql”,是的,您将得到一个错误,因为您当前的工作目录是包含 main_test.sql 的目录,因此使用“..”查找一个目录级别是行不通的。在这种情况下,您需要删除“..”或使用“.” (单句 - 表示当前目录)让事情正常工作。

分享和享受。

于 2009-12-15T12:21:32.040 回答