gpt4 book ai didi

oracle - 在对象的 Oracle 类型表中插入行

转载 作者:行者123 更新时间:2023-12-04 00:31:57 26 4
gpt4 key购买 nike

我能够将查询批量收集到对象类型的表中,但似乎无法
做一个简单的插入。即使在单行插入中,我也必须使用 BULK 收集吗?

DROP TYPE T_TABLE;
/

CREATE OR REPLACE TYPE T_ROW AS OBJECT
(
ID NUMBER(10),
DESCRIPTION VARCHAR2(50)
);
/

CREATE OR REPLACE TYPE T_TABLE AS TABLE OF T_ROW;
/

DECLARE

V_TABLE T_TABLE;
V_ROW T_ROW;

BEGIN
INSERT INTO TABLE(V_TABLE) VALUES (1,'XXX');
--INSERT INTO T_TABLE(V_TABLE) VALUES (T_ROW(1,'XXX'));
--INSERT INTO TABLE(V_TABLE) VALUES (V_ROW(1,'XXX'));
END;

最佳答案

有多种方法可以将项目添加到集合中,包括:

在构造函数中填充集合:

DECLARE
V_TABLE T_TABLE := T_TABLE(
T_ROW( 1, 'XXX' ),
T_ROW( 2, 'YYY' ),
T_ROW( 3, 'ZZZ' )
);
BEGIN
-- Do stuff with the collection here...
NULL;
END;
/

或者,逐行填充表格:
DECLARE
V_TABLE T_TABLE;
BEGIN
-- Constructor
V_TABLE := T_TABLE();
-- Extend by the default, 1 element
V_TABLE.EXTEND;
-- Populate that element
V_TABLE(1) := T_ROW( 1, 'XXX' );

-- Extend by 2 elements
V_TABLE.EXTEND(2);
V_TABLE(2) := T_ROW( 2, 'YYY' );
V_TABLE(V_TABLE.COUNT) := T_ROW( 3, 'ZZZ' );

-- Do stuff with the collection here...
END;
/

或者,使用 SQL 和 BULK COLLECT INTO :
DECLARE
V_TABLE T_TABLE;
BEGIN
SELECT rw
BULK COLLECT INTO V_TABLE
FROM (
SELECT T_ROW( 1, 'XXX' ) AS rw FROM DUAL UNION ALL
SELECT T_ROW( 2, 'YYY' ) FROM DUAL UNION ALL
SELECT T_ROW( 3, 'ZZZ' ) FROM DUAL
);
END;
/

使用 MULTISET UNION ALL连接集合:
DECLARE
V_TABLE1 T_TABLE := T_TABLE( T_ROW( 1, 'XXX' ), T_ROW( 2, 'YYY' ) );
V_TABLE2 T_TABLE := T_TABLE( T_ROW( 3, 'ZZZ' ) );
V_TABLE3 T_TABLE;
BEGIN
V_TABLE3 := V_TABLE1 MULTISET UNION ALL V_TABLE2;
END;
/

或者,如果集合是嵌套表,那么您可以在 SQL 中执行此操作:

SQL Fiddle

Oracle 11g R2 架构设置 :
CREATE TABLE test(
id NUMBER,
tbl T_TABLE
) NESTED TABLE tbl STORE AS test_tab
/

INSERT INTO test VALUES ( 1, T_TABLE() )
/
INSERT INTO TABLE( SELECT tbl FROM test WHERE id = 1 ) VALUES ( T_ROW( 1, 'XXX' ) )
/
INSERT INTO TABLE( SELECT tbl FROM test WHERE id = 1 ) VALUES ( T_ROW( 2, 'YYY' ) )
/

查询 1 :
SELECT t.id, tt.id, tt.description
FROM test t
CROSS JOIN
TABLE( t.tbl ) tt

Results :
| ID | ID | DESCRIPTION |
|----|----|-------------|
| 1 | 1 | XXX |
| 1 | 2 | YYY |

关于oracle - 在对象的 Oracle 类型表中插入行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49785663/

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