处理游标中的LONG RAW数据

时间:2013-01-04 00:09:59

标签: oracle plsql cursor blob

首先,我知道LONG RAW被弃用/邪恶/可怕/难以使用。我无法控制数据库的架构。 :)

我目前有一个程序从数据库中检索LONG RAW列并在客户端处理它。这很好用,但我想做的是将这个处理移到服务器上,这样我就不必在不同的客户端情况下将处理代码翻译成不同的语言。

所以我当前的查询只是

SELECT t.ID, t.POINTS
  FROM TBL_DATAPOINTS t
 WHERE ...etc

然后t.POINTS由客户端处理。

我试图将其转移到Oracle过程,但我无法弄清楚如何将LONG RAW列转换为我可以使用的东西 - 最好是VARCHAR2。如果我将其检索到游标中,如何处理每一行,然后使用处理过的数据返回游标?

我无法内联:

OPEN curData FOR
  SELECT t.ID, t.POINTS, fnProcessData(t.POINTS)
    FROM TBL_DATAPOINTS t
   WHERE ...etc

因为将LONG RAW数据传递给函数的限制(我得'非法使用LONG数据类型')。

我想也许我可以检索光标中的原始数据,然后遍历它并处理每一行,但我不知道如何(或是否)动态更改光标的结构。

1 个答案:

答案 0 :(得分:0)

这取决于您需要做的处理。有了LONG RAW,你可以看到非常有限。 如果可行,您可以使用TO_LOB()函数将行存储在临时表中,其中您的值将作为BLOB列访问(检查DBMS_LOB包)。