2012-10-17 108 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;