Oracle 18c,如何在私有临时表中定义BLOB列?

时间:2018-11-06 13:58:30

标签: oracle blob temp-tables

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

用于创建临时表的PRIVATE的代码(也有其他一些列,但是我注释掉了每隔一列,除了在下一段中提到的那两个):

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

当我尝试执行上面的语句时,我得到: ORA-14451:临时表不支持的功能 14451。00000-“临时表不支持的功能” *原因:尝试创建物联网,指定物理属性,            指定分区或并行子句。 *操作:请勿这样做。

但是,如果我注释userdata列,它将成功执行。

我在Oracle 18c文档中可以找到的所有内容是,创建PRIVATE临时表(自18c起可用)的限制/约束应与PUBLIC临时表(在18c版本之前可用)相同/但不是是的,因为我尝试使用BLOB列定义PUBLIC临时表,并且它起作用了。

我将非常感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

  

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

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

关于私有临时表的事情是它们是内存结构,以及那里的会话内存结构。因此,当涉及BLOB时,内存管理会很复杂。 (略有相关,导致ORA-14451的其他原因之一是creating a PTT in a PDB with the in-memory option enabled。)

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

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