【发布时间】:2021-08-04 17:24:15
【问题描述】:
我有一个表 (trn_aplctn),其中一个列 (clnt) 作为嵌套表类型。此嵌套表列本身具有其列之一 (clnt_prgm) 作为嵌套表类型。
这里是示例代码sn-p。
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 表及其嵌套列 Clnt、clnt_prgm 中插入行,没有任何问题。在最新的数据库升级到 19.10 后,插入到第二个嵌套列 clnt_prgm 不起作用,并且我不断收到错误消息“ORA-26781 Nested table not supported error”。请在下面找到我用来在这些列中插入行的示例插入和更新
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,'NC',1,'A');
有没有人在 19.10 版本中遇到过这个问题。相同的代码在 19.3 中运行良好,在 19.10 中抛出错误。有人可以帮我看看到底发生了什么。
【问题讨论】:
标签: oracle nested-table