2012-10-17 32 views
0

我有一個表,其中包含一個類型爲VARCHAR2和長度爲255的字段,我用它來存儲URL。運行SELECT查詢就可以返回數據,如下:Oracle URL字符串

SELECT URL FROM SERVICE WHERE ID = 1 

回報我已經存儲了URL(在這種情況下,文件:返回///test.url/)。

但是,從存儲過程運行相同的東西,我得到一個空框。我所有的其他領域都被填補了,我不會有任何錯誤。 URL字段必須包含數據,並且我確信它傳入的變量足夠大以支持它。

我的問題是這樣的:爲了通過存儲過程傳遞URL-esque字符串,我需要以特定的方式處理它嗎?與工作同事討論這個問題提出了一個觀點,即URL字符串中的字符可能會導致某種形式的escape子句被觸發,但我無法找到關於該主題的任何進一步信息。

編輯:使用的存儲過程的一部分:

 SELECT  ..., 
        USER.SERVICE.URL, 
        ... 

     FROM   USER.SITE 

     -- More joins 

     INNER JOIN USER.SERVICE 
     ON   USER.SITE.URLID = USER.SERVICE.ID   

     -- More joins 

     WHERE   USER.SERVICE.ID = 1... 
+1

發佈您的存儲過程! 快速回答:不,你不必以任何特殊的方式處理它。 – ppeterka

+0

你可以包含你的存儲過程的代碼嗎? – StevieG

+0

不幸的是,在這裏發佈太大了,但我會包含試圖從表中獲取它的位。 – Skulmuk

回答

1

你從一個存儲過程運行此。這意味着你需要將它選入一個變量。從它的聲音中,您將選定的數據展示給客戶端應用程序,這意味着您需要以某種方式將其傳遞出去,例如通過OUT參數。

所以你的問題的一個可能的答案是你沒有填充你認爲你正在填充的變量,或者你沒有將值傳遞給OUT參數(或其他)。

無論如何你反彈它,這是一個調試場景。如果你不能在這裏發佈你的代碼(我敢肯定,當我說我真的不想在你的大塊o'代碼中)時,我會爲我們說話,那麼你需要自己去完成。

2

就像他說的,你只執行選擇,但你不存儲它。您需要將該字段的值存儲在變量中。爲了使用一個存儲過程或包內,你需要將其存儲在一個變量就這樣

SELECT field INTO var FROM table 

記住,你不需要處理它在一個特殊的方式,因爲它只是一個簡單的串。你的程序應該是這樣的。

CREATE PROCEDURE DEMO(R_URL OUT VARCHAR2) IS 
BEGIN 
SELECT URL INTO R_URL FROM DUAL; 
END;