如何在 Private Temporary Table 中定义 BLOB 列?

How to define BLOB column in Private Temporary Table?

在 Oracle 数据库中编写某些过程时,我遇到了一个问题,我试图用 BLOB 数据类型的列定义 PRIVATE 临时 table 但它不允许我。

用于创建 PRIVATE 临时文件的代码 table:

CREATE PRIVATE TEMPORARY TABLE ora$ptt_Test (
        id NUMBER(19), 
        userdata BLOB);

当我尝试执行上面的语句时,我得到:

ORA-14451: unsupported feature with temporary table
14451. 00000 - "unsupported feature with temporary table"
*Cause: An attempt was made to create an IOT, specify physical attributes,
specify partition or parallel clause.
*Action: do not do that.

但是如果我评论userdata列,它执行成功。

我在文档中能找到的是,创建 PRIVATE 临时 table 的 limitations/constraints(自 18c 起可用)应该与 PUBLIC 临时 tables(在版本 18c 之前也可用),但事实并非如此,因为我试图用 BLOB 列定义 PUBLIC 临时 table,并且它起作用了。

I tried to define PRIVATE temporary table with column of BLOB data type and it did not let me.

对于 CLOB 和 BLOB,这是可重现的。可能这是一个错误,但文档错误而不是实现错误。

关于私有临时表的事情是它们是内存结构,而且是会话内存结构。因此,当涉及 B​​LOB 时,内存管理会变得复杂。 (略有关联,另一个导致ORA-14451的原因之一是creating a PTT in a PDB with the in-memory option enabled。)

另一方面,我们可以在 PL/SQL 中创建 BLOB 集合,因此在内存结构中处理 BLOB 没有绝对障碍。这意味着这可能只是初始实施的限制,将在后续版本中解决。

当然,

None 其中现在对您有帮助,但除了向 Oracle 提出 SR(假设您为拥有 Oracle 支持合同的组织工作)外,我们没有太多建议。