微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ORA-26781 不支持嵌套表错误 -- 仅在 Oracle 19.10 中发生

如何解决ORA-26781 不支持嵌套表错误 -- 仅在 Oracle 19.10 中发生

我有一个表 (trn_aplctn),其中一列 (clnt) 作为嵌套表类型。这个嵌套表列本身有一个列 (clnt_prgm) 作为嵌套表类型。

这是示例代码片段。

CREATE TYPE prgm_typ AS OBJECT (  
    prgm_id number(30),prg_type VARCHAR2(18),prg_flag VARCHAR2(100),active        CHAR(1)
);
/
CREATE TYPE prgm_tab_typ IS TABLE OF prgm_typ;
/

CREATE TYPE clnt_typ AS OBJECT ( 
    clnt_id     NUMBER (30),active        CHAR(1),clnt_prgm prgm_tab_typ);
/
CREATE TYPE clnt_tab_typ IS TABLE OF clnt_typ; 
/

CREATE TABLE trn_aplctn
(   
    aplctn_id      Number(30) NOT NULL,aplctn_idntfr    VARCHAR2 (64),active       CHAR (1 BYTE) DEFAULT 'A',clnt clnt_tab_typ
) 
nesTED TABLE clnt STORE AS clnt_tbl
        (
        nesTED TABLE clnt_prgm STORE AS clnt_prgm_tbl 
    );

我一直在 trn_aplctn 表及其嵌套列 Clntclnt_prgm 中插入行,到目前为止没有任何问题。在最新的数据库升级到 19.10 后,插入到第二个嵌套列 clnt_prgm 不起作用,我不断收到错误消息“ORA-26781 嵌套表不支持错误”。请在下面找到我用来在这些列中插入行的示例插入和更新

INSERT INTO trn_aplctn ( aplctn_id,aplctn_idntfr,active )
VALUES(123,'APP12345','A');

/第一级嵌套列的更新在 19.10 和 19.3 中均适用/

UPDATE trn_aplctn SET clnt = clnt_tab_typ(clnt_typ(100,'A',NULL))
                       WHERE aplctn_idntfr  = 'APP12345'                        
                        AND active      = 'A';

/下面更新到嵌套列的第二级在 19.3 中工作正常,但在 19.10 中失败并出现以下错误/

 UPDATE TABLE (SELECT clnt FROM trn_aplctn WHERE  aplctn_idntfr = 'APP12345'
  AND active       = 'A')
 SET clnt_prgm =  prgm_tab_typ ( prgm_typ(1000,'NC',1,'A' ))
 where clnt_id   = 100
 AND active        = 'A';

26781:不支持嵌套表

我也尝试在插入之前初始化第二级嵌套列,但它不允许我初始化对象本身。

/***以下在 19.3 下工作正常,但在 19.10 中初始化时出错

UPDATE table ---error 26781: nested table not supported 
         ( 
                SELECT clnt 
                FROM   trn_aplctn 
                WHERE  aplctn_idntfr = 'APP12345'                       
                AND active      = 'A' ) 
  SET    clnt_prgm = new prgm_tab_typ() 
  WHERE  clnt_id = 100 
  AND    active    = 'A'; 



INSERT INTO TABLE( SELECT clnt_prgm FROM TABLE(SELECT clnt FROM trn_aplctn WHERE  aplctn_idntfr = 'APP12345'
   AND active       = 'A' ) WHERE clnt_id =100 )
 ( prgm_id,prg_type,prg_flag,active )
 VALUES(1000,'A');

有没有人在 19.10 版本中遇到过这个问题。相同的代码在 19.3 中运行良好,并在 19.10 中引发错误。有人可以帮我看看到底发生了什么。

解决方法

这个问题解决了吗?一种解决方法是在表级别禁用补充日志记录,但这不是理想的解决方案。 谢谢 阿尼尔

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。