2009-12-15 77 views
6

的位置開始。當我有一個子目錄兩個SQL-文件,其中一個相對路徑甲骨文sqlplus中:在腳本

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文件我打電話的不是目錄進行評估。

有沒有辦法使用從包含調用的文件目錄開始的相對路徑?

回答

3

不支持'文件'網址 - 因爲使用'http://'路徑時,這實際上工作得很好!

我成立「sub_test \ sub_test.sql」包含雙ATS:

@@../main.sql 

把整個目錄結構的Tomcat的webapps/ROOT環境下,如果你這樣調用它的工作原理:

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

可能有點矯枉過正建立一個網絡服務器我猜? (也明顯與FTP一起工作 - 沒有嘗試過)。

+0

感謝您嘗試和分享:)因爲我不需要這個,我不認爲我會設置一個網絡服務器。 – 2009-12-19 20:29:19

1

我不知道這種恐懼的方式,但它確實說明了這種託管腳本方法的一個問題。

我記得當我從7.1版本開始使用Oracle時,無論我們將幾乎所有的東西都使用腳本,但是有太多的任務只能通過外部腳本才能實現,您可能還會將它們用於一切。不過,我認爲每次發佈的原因都不多,而我現在唯一的理由是將其重構爲11g的pl/sql。

+0

什麼,甚至是DDL腳本? – APC 2009-12-15 12:58:16

+0

是指您將DDL作爲新代碼部署的一部分,還是作爲常規批作業的一部分(例如)。 – 2009-12-15 13:07:45

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的工作目錄,所以使用「..」查找一個目錄級別是行不通的。在這種情況下,您需要刪除「..」或使用「。」。 (單個週期 - 表示當前目錄)讓事情發揮作用。

分享和享受。

+1

謝謝!我知道把它改成「。」在那種情況下會有所幫助,但是當然它不會從主目錄工作。我在想的是一種告訴腳本不要將相對路徑的當前工作目錄,而是腳本實際所在的目錄。該腳本「知道」其他腳本與自己的位置進行比較,我希望它不考慮我當前的工作目錄,這是不相關的... – 2009-12-15 13:05:56