0

我有一个表,其中包含一个类型为 VARCHAR2 且长度为 255 的字段,用于存储 URL。对其运行 SELECT 查询会返回数据,如下所示:

SELECT URL FROM SERVICE WHERE ID = 1

返回我存储的 URL(在这种情况下,返回 file:///test.url/)。

但是,从存储过程运行相同的东西,我得到一个空框。我的所有其他字段都已填写,我没有收到任何错误。URL 字段肯定包含数据,并且我确保它传入的变量足够大以支持它。

我的问题是:为了通过存储过程传递 URL 式字符串,我是否需要以特定方式处理它?与工作同事就此进行的讨论提出了这样的想法,即 URL 字符串中的字符可能会导致某种形式的转义子句被触发,但我无法找到有关该主题的任何进一步信息。

编辑:使用的部分存储过程:

      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...
4

2 回答 2

2

就像他说的那样,您只执行选择,但不存储它。您需要将字段的值存储在变量上。为了在存储过程或包中使用它,您需要将它存储在一个变量中,就像这样

SELECT field INTO var FROM table

请记住,您不需要以特殊方式处理它,因为它只是一个简单的字符串。你的程序应该是这样的。

CREATE PROCEDURE DEMO(R_URL OUT VARCHAR2) IS  
BEGIN
 SELECT URL INTO R_URL FROM DUAL;
END;
于 2012-10-18T15:36:03.410 回答
1

您正在从存储过程运行它。这意味着您需要将其选择为变量。从它的声音来看,您将所选数据暴露给客户端应用程序,这意味着您需要以某种方式将其传递出去,例如通过 OUT 参数。

因此,对您的问题的一个可能答案是您没有填充您认为正在填充的变量,或者您没有将值传递给 OUT 参数(或其他)。

无论如何你反弹它,这是一个调试场景。如果你不能在这里发布你的代码(当我说我真的不想仔细研究你的大块代码时,我相信我代表我们所有人),那么你需要自己去检查。

于 2012-10-17T14:24:56.660 回答