问题描述
我有一个表 (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 表及其嵌套列 Clnt、clnt_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 中引发错误。有人可以帮我看看到底发生了什么。
解决方法
这个问题解决了吗?一种解决方法是在表级别禁用补充日志记录,但这不是理想的解决方案。 谢谢 阿尼尔