将长原始数据检索到clob变量中

时间:2011-11-10 17:52:38

标签: oracle delphi plsql oracle9i

我想从具有long raw数据类型的列中检索长原始数据到clob变量中。

如果我直接写insert语句,我就无法插入长原始列。

我必须使用utl_raw.cast_to_raw(..)函数将文本插入到长原始列中。 有人可以解释这个问题吗?

让我向您解释一下这个

的工作流程
  1. 用户在Delphi中的富编辑器控件中输入格式化文本并保存。

  2. 数据保存在长原始列中。

  3. 用户点击Delphi中的按钮,数据应从长原始列中检索并显示在富编辑器控件中。

  4. 所以我们需要的是一个传递id的SQL,它应该返回long raw的数据。

    这样可行但数据不可读,因为我们得到二进制垃圾数据。

      

    此表的表结构如下       创建表数据(id integer,data long raw);

    我使用oracle 9i作为数据库。

1 个答案:

答案 0 :(得分:1)

自Oracle 8.0(即差不多十五年前)以来,LONG和LONG RAW数据类型已被弃用,有利于CLOB和BLOB。这种转换的主要原因是LONG列真的难以使用,而LONG RAW则会增加一倍。

正如您已经发现的那样,我们可以在PL / SQL中做些什么。这个限制是32K。较大的LONG RAW列只能在C中处理。


Tom Kyte曾经托管过一个实用程序来将Long Raw列卸载到一个平面文件中,然后可以通过SQL Loader将其加载到现代LOB列中。这种可能性似乎不可用(它不在他博客上的/ ~tkyte文件列表中)。

然而,方新楼编写了另一个Tom Kyte实用程序的版本,他称之为ociuldr,显然处理Long Raw。您可以从他的网站下载源代码。 Find out more

NB 我没有为自己尝试ociuldr(自上个千禧年以来我没有遇到过Long Raw),而且我不会以任何方式对其进行保证。但它似乎是互联网现在提供的唯一解决方案。所以我建议你尝试一下,除非你有很好的OCI技能,并且可以编写你自己的实现。