我们在Oracle中有一个表,其中BLOB列需要填充少量任意字节数据 – 我们永远不会输入超过4000字节的数据.
我正在使用现有的基于C OCI的基础结构,这使得在某些上下文中使用绑定变量非常困难,因此我需要仅使用简单查询来填充此BLOB列. (我们正在努力使其现代化,但今天不是一种选择,)
我们对这样的查询运气不错:
UPDATE MyTable
SET blobData = HEXTORAW('0EC1D7FA6B411DA5814...lots of hex data...0EC1D7FA6B411DA5814')
WHERE ID = 123;
起初,这很有效.但是,最近我们遇到了一个需要输入2000多字节数据的情况.此时,我们遇到Oracle错误ORA-01704:字符串文字太长,因为传递给HEXTORAW的字符串超过4000个字符.我尝试拆分字符串,然后与||连接,但这并没有避免错误.
因此,我需要一种更新此列的方法,并使用简单的查询将其填充超过2000字节的数据.可能吗?
(我知道如果我拥有绑定变量,那将是微不足道的 – 实际上与这个表交互的其他应用程序使用了这种确切的技术 – 但不幸的是我无法在这里重构数据库内容.只需要将数据输入表格.)
编辑:
一种没有用的有希望的方法是连接RAW:
UTL_RAW.CONCAT(HEXTORAW('...'), HEXTORAW('...'), HEXTORAW('...'))
这会躲避字符串长度限制,但似乎Oracle在RAW长度上也有一个匹配的内部2000字节限制.所以我不能用RAW填充blob.也许有一个函数可以将多个RAW连接成一个BLOB.