Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle sqlplus:从脚本位置开始的相对路径_Sql_Oracle10g_Sqlplus - Fatal编程技术网

Oracle sqlplus:从脚本位置开始的相对路径

Oracle sqlplus:从脚本位置开始的相对路径,sql,oracle10g,sqlplus,Sql,Oracle10g,Sqlplus,当我有两个sql文件时,其中一个在子目录中 main_test.sql sub/sub_test.sql sub> sqlplus xxx @ sub_test.sql 和sub_test.sql调用@../main_test.sql(或@../main_test.sql),然后从子目录执行它时,它可以正常工作 main_test.sql sub/sub_test.sql sub> sqlplus xxx @ sub_test.sql 但是当我打电话的时候 sub> c

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

main_test.sql
sub/sub_test.sql
sub> sqlplus xxx @ sub_test.sql
sub_test.sql
调用
@../main_test.sql
(或
@../main_test.sql
),然后从子目录执行它时,它可以正常工作

main_test.sql
sub/sub_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文件的目录


有没有一种方法可以使用从包含调用的文件目录开始的相对路径?

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

我记得当我在v7.1中开始使用Oracle时,我们几乎所有的事情都会使用脚本,但是有太多的任务只能通过外部脚本来完成,所以您也可以将它们用于所有事情。然而,我认为在每一个版本中这样做的理由已经少了,我现在唯一的理由就是用11g将其重构为pl/sql。

(在我看来,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的目录,所以使用“.”查找一个目录级别这是行不通的。在这种情况下,您需要删除“.”或使用“.”(单句点-表示当前目录)以使工作正常进行


共享和享受。

遗憾的是,不支持“文件”url,因为这在使用“http://”路径时实际上非常有效

我设置了“sub_test\sub_test.sql”来包含双ats:

@@../main.sql
将整个目录结构放在Tomcat webapps/ROOT上下文下,如果您这样调用它,它就会工作:

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

我想可能是设置web服务器有点过火吧??(显然也适用于FTP-未试用过)。

谢谢!我知道将其更改为“.”在这种情况下会有所帮助,但在主目录下当然不起作用。我想的是告诉脚本不要将当前工作目录作为相对路径,而是脚本实际所在的目录。脚本“知道”其他脚本与它自己的位置相比,我希望它不要考虑我当前的工作目录,这是不相关的……你是指DDL作为一个新的代码部署的一部分,还是作为一个普通的批作业的一部分(例如)?谢谢尝试和分享:)我不需要这个,不过,我不认为我会设置一个web服务器。