【问题标题】:Concurrency level of VARRAY vs Nested tablesVARRAY 与嵌套表的并发级别
【发布时间】:2020-02-06 17:20:31
【问题描述】:

我想知道什么会有更好的并发级别、VARRAY 或嵌套表。 VARRAY 真的只需要一个输入/输出操作就可以加载集合吗?

这是一个预订系统。

问候,

【问题讨论】:

  • 如果您在询问“并发级别”时解释您的意思,您可能会得到更详细的答案,因为大多数数据库(包括 Oracle)都有 ACID 属性,这意味着存在atomicity in transactions。当您询问 I/O 操作时,您是在事务级别(即 DML 语句)还是在询问磁盘 I/O?
  • 嗨,我问的是事务级别。抱歉不够清楚。

标签: oracle concurrency nested-table varray


【解决方案1】:

VARRAY 真的只需要一个输入/输出操作就可以加载集合吗?

定义一个VARRAY 和一个集合类型:

CREATE TYPE test_varray AS VARRAY(3) OF NUMBER;
CREATE TYPE test_collection AS TABLE OF NUMBER;

然后您可以为每种数据类型创建类似的表:

CREATE TABLE test1 (
  id    NUMBER PRIMARY KEY,
  array test_varray
);

CREATE TABLE test2 (
  id    NUMBER PRIMARY KEY,
  array test_collection
) NESTED TABLE array STORE AS test2__array;

您可以将INSERT 作为单个语句添加到这些表中:

INSERT INTO test1 ( id, array ) VALUES ( 1, test_varray( 1.1, 1.2, 1.3 ) );
INSERT INTO test2 ( id, array ) VALUES ( 1, test_collection( 1.1, 1.2, 1.3 ) );

您可以将这些表中的SELECT 作为单个语句:

SELECT id, column_value FROM test1 CROSS JOIN TABLE( array );
SELECT id, column_value FROM test2 CROSS JOIN TABLE( array );

这两个输出:

身份证 | COLUMN_VALUE -: | ------------: 1 | 1.1 1 | 1.2 1 | 1.3

db小提琴here

所以从INSERT/SELECT 操作的角度来看,它们在功能上是相似的。 Oracle Documentation - Understanding PL/SQL Collection Types主要解释了一些不同之处:

  • VARRAY 具有有限数量的元素并且总是密集的。
  • 集合(嵌套表)可以包含无限数量的元素并且可以是稀疏的。

【讨论】:

    猜你喜欢
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    相关资源
    最近更新 更多