我想从具有long raw数据类型的列中检索长原始数据到clob变量中。
如果我直接写insert语句,我就无法插入长原始列。
我必须使用utl_raw.cast_to_raw(..)函数将文本插入到长原始列中。 有人可以解释这个问题吗?
让我向您解释一下这个
的工作流程用户在Delphi中的富编辑器控件中输入格式化文本并保存。
数据保存在长原始列中。
用户点击Delphi中的按钮,数据应从长原始列中检索并显示在富编辑器控件中。
所以我们需要的是一个传递id的SQL,它应该返回long raw的数据。
这样可行但数据不可读,因为我们得到二进制垃圾数据。
此表的表结构如下 创建表数据(id integer,data long raw);
我使用oracle 9i作为数据库。
答案 0 :(得分:1)
自Oracle 8.0(即差不多十五年前)以来,LONG和LONG RAW数据类型已被弃用,有利于CLOB和BLOB。这种转换的主要原因是LONG列真的难以使用,而LONG RAW则会增加一倍。
正如您已经发现的那样,我们可以在PL / SQL中做些什么。这个限制是32K。较大的LONG RAW列只能在C中处理。
然而,方新楼编写了另一个Tom Kyte实用程序的版本,他称之为ociuldr
,显然处理Long Raw。您可以从他的网站下载源代码。 Find out more。
NB 我没有为自己尝试ociuldr
(自上个千禧年以来我没有遇到过Long Raw),而且我不会以任何方式对其进行保证。但它似乎是互联网现在提供的唯一解决方案。所以我建议你尝试一下,除非你有很好的OCI技能,并且可以编写你自己的实现。