3

在 Oracle 数据库中编写某些过程期间,我遇到了一个问题,我试图用BLOB数据类型的列定义 PRIVATE 临时表,但它没有让我这样做。

创建 PRIVATE 临时表的代码:

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

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

ORA-14451:临时表 14451 不支持的功能。
00000 - “临时表不支持的功能”
*原因:尝试创建 IOT、指定物理属性、
指定分区或并行子句。
*行动:不要那样做。

但如果我评论userdata专栏,它会成功执行。

我在文档中可以找到的是,创建 PRIVATE 临时表(自 18c 起可用)的限制/约束应该与 PUBLIC 临时表(在 18c 版之前也可用)相同,但事实并非如此,因为我试过用BLOB列定义 PUBLIC 临时表,它起作用了。

4

1 回答 1

6

我试图用 BLOB 数据类型的列定义 PRIVATE 临时表,但它没有让我这样做。

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

私有临时表的问题在于它们是内存结构,并且是会话内存结构。因此,当涉及 B​​LOB 时,内存管理会变得复杂。(稍微相关的是,ORA-14451 的其他原因之一是在启用内存选项的 PDB 中创建 PTT。)

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

当然,现在这些都对您没有帮助,但是除了向 Oracle 提出 SR(假设您为一个拥有 Oracle 支持合同的组织工作)之外,我们没有什么可以建议的。

于 2018-11-06T14:50:39.970 回答