gpt4 book ai didi

oracle - 如何在oracle中向对象类型列添加更多行

转载 作者:行者123 更新时间:2023-12-01 02:30:56 24 4
gpt4 key购买 nike

CREATE OR REPLACE TYPE excep_type
AS
OBJECT (overridden_attribute VARCHAR2 (30), exception_id NUMBER);

CREATE TABLE obj_test (id NUMBER, obj_col excep_type);


INSERT INTO obj_test
VALUES (1, excep_type ('x', 1));

SELECT * FROM obj_test;

ID OBJ_COL
--------------
1 (X,1)

这对我来说很好,但假设我想向这个对象类型列 obj_col 添加更多记录,那么需要做什么。

假设还有一条记录 Y,2 需要插入到 ID 1 的 obj_col 列中
那么需要执行什么语句。
预期产出
ID   OBJ_COL
--------------
1 (X,1)
(Y,2)

如果我想更新现有的,比如 X,1 是从 Z,3 更新的,那么需要做什么。预期输出
ID   OBJ_COL
--------------
1 (Z,3)

请在这件事上给予我帮助

最佳答案

为此,您需要使用嵌套表。下面是一个例子:

create or replace type excep_type as object 
(
overridden_attribute varchar2 (30),
exception_id number
)
/

create or replace type t_excep_type as table of excep_type
/

create table nst_table
(
id number,
exp t_excep_type
) nested table exp store as nst_exp -- name of the nested table
/


-- inserting of record in the base table

SQL> insert into nst_table(id, exp)
2 values(1, t_excep_type(excep_type('X', 1)));

1 row inserted

SQL> commit;

Commit complete

SQL> select * from nst_table t, table(t.exp);

ID EXP OVERRIDDEN_ATTRIBUTE EXCEPTION_ID
--------------------------------------------- ------------
1 <Ob X 1

-- inserting of record in the nested table

SQL> insert into table(select exp from nst_table where id = 1)
2 values (excep_type('Y', '2'))
3 ;

1 row inserted

SQL> commit;

Commit complete

-- unnesting.

SQL> select * from nst_table t, table(t.exp);

ID EXP OVERRIDDEN_ATTRIBUTE EXCEPTION_ID
---------- --- ------------------------------ ------------
1 <Ob X 1
1 <Ob Y 2


-- updating of data in the nested table

SQL> update table(select exp from nst_table where id = 1)
2 set overridden_attribute = 'Z', exception_id = 3
3 where exception_id = 1 and overridden_attribute = 'X';

1 row updated

SQL> select * from nst_table t, table(t.exp);

ID EXP OVERRIDDEN_ATTRIBUTE EXCEPTION_ID
---------- --- -------------------------------------------
1 <Ob Z 3
1 <Ob Y 2

但是这种存储数据以实现主从关系的方法并不是最好的方法。

关于oracle - 如何在oracle中向对象类型列添加更多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13007651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com