• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    oracle中变长数组varray,嵌套表,集合使用方法

    创建变长数组类型

    CREATE TYPE varray_type AS VARRAY(2) OF VARCHAR2(50); 

    这个变长数组最多可以容纳两个数据,数据的类型为 varchar2(50)

    更改元素类型的大小或精度

    可以更改变长数组类型和嵌套表类型 元素的大小。

    ALTER TYPE varray_type 
    MODIFY ELEMENT TYPE varchar2(100) CASCADE;

    CASCADE选项吧更改传播到数据库中的以来对象。也可以用 INVALIDATE 选项使依赖对象无效

    增加变长数组的元素数目

    ALTER TYPE vrray_name
    MODIFY LIMIT 5 CASCADE;

    使用变长数组

    CREATE TABLE table_name(
    column_name type,
    var_col_name varray_type
    );

    获得变长数组的信息

    DESC[RIBE] varray_type;
    
    SELECT * 
    FROM user_varrays
    WHERE type_name = varray_name;

    DESC 获得的是 varray_type AS VARRAY(2) OF VARCHAR2(50)

    填充变长数组元素

    INSERT INTO table_name VALUES(
     value,
     varray_type(
      'xxxx',
      'xx',
      'x')
    );

    可以一次向变长数组添加多个数据。

    查找变长数组元素

    SELECT *
    FROM table_Name;

    如果变长数组中的元素有多个,会一起输出,输出的数据列是一个长列,跟包含对象的表一样。

    更改变长数组元素

    要想更改变长数组的一个元素,需要把其他元素一起更改,整个变长数组作为一个整体来的。

    UPDATE table_name
    SET var_col_name = varray_type('xxx','xxxxxx')
    WHERE expr1;

    创建嵌套表类型

    CREATE TYPE table_type AS TABLE OF type;

    其中type 可以为任何类型,包括varray 和 object ,通常object 居多。

    使用嵌套表类型

    CREATE TABLE table_name(
     column_name type,
     tab_col_name table_type
    )
    NESTED TABLE
     table_col_name
    STORE AS
     next_table_name [TABLESPACE user_name];

    创建嵌套表的时候要为嵌套表类型另外创建一个表来保存数据, NESTED 以下的部分就是在干这事。那个表的名称为: next_table_name

    TABLESPACE 可以将另外创建表放到另外的空间。

    获得表信息

    SET DESCRIBE DEPTH 2
    DESC[RIBE] table_name;

    也可以直接通过数据字典来获得嵌套表的信息

    SELECT *
    FROM user_nested_tables
    WHERE table_name = xxxx;

    填充、查找嵌套表元素

    跟变长数组方法一样

    更改嵌套表元素

    跟变长数组不同,嵌套表的元素可以单独更改:可以插入、更改和删除嵌套表元素。

    插入:

    INSERT INTO TABLE(
     SELECT tab_col_name FROM table_name WHERE expr)
     VALUES(
      table_type('xxxx')
     )
    );

    更改:

    UPDATE TABLE(
     SELECT tab_col_name FROM table_name WHERE expr
    ) T
    SET
     VALUE(T) = table_type(
      'xxxx')
    )
    WHERE 
     VALUE(T) = table_type(
      expr2
      );

    T 为获得需要修改的那行数据对应的 嵌套表位置,WHERE 为判断语句,如果table_type 为object类型,expr2 这样写: 'x','xx','xxx'

    删除:

    DELETE FROM TABLE(
     SELECT tab_col_name FROM table_name WHERE expr
    )T
    WHERE
     VALUE(T) = table_type(
      expr2
     );

    集合方法

    EXISTS(N)

    如果第n个元素存在,返回TRUE

    COUNT

    该函数集合元素的数目

    DELETE

    DELETE(n)

    DELETE(n,m)

    删除集合元素

    l 删除所有元素

    l 删除第n个元素

    l 删除n到m的元素

    FIRST

    返回集合第一个(最小的)元素索引号,如果集合为空,返回NULL

    LAST

    返回集合中最后一个(最大的)元素索引号,如果集合为空,返回NULL

    NEXT(n)

    返回集合当前元素的下n元素的索引号,如果它不存在就返回NULL

    PRIOR(n)

    返回集合当前元素的前n元素的索引号,如果它不存在就返回NULL

    LIMIT

    返回varray中创建元素的最大个数

    EXTEND

    EXTEND(n)

    EXTEND(n,m)

    增加集合的大小。

    l 添加一个,设为空

    l 添加n个,设为空

    l 添加n个,设为m

    TRIM

    TRIM(n)

    从集合末尾处删除元素

    l 删除一个

    l 删除n个

    调用方法是: tab_col_name.COUNT

    嵌套表运算符操作

    例如:

    var_tab_1 table_type;
    var_tab_2 table_type;
    var_tab_3 table_type;
    reslut BOOLEAN;

    var_tab_1 :=table_type('1','2');
    var_tab_2 :=table_type('3','4');
    var_tab_3 :=table_type('2','1');

    result:= var_tab_1 =var_tab_3  result 为true;
    result:= var_tab_2 >var_tab_3  result 为true;

    IN 和 NOT IN 运算符
    用于检测一个嵌套表的内容是否出现在令一个嵌套表的内容中。
    result:= var_tab_1 IN (var_tab_3); result 为 TRUE;
    result:= var_tab_2 NOT IN (var_tab_3); result 为 TRUE;

    SUBMULITSET 子集运算符
    检查一个嵌套表的内容是否为另外一个嵌套表的子集
    result:= var_tab_1 SUBMULITSET OF var_tab_3 result 为TRUE;

    MULTISET 集合运算符
    返回的是一个嵌套集
    MULTISET UNION
    MULTISET INTERSECT
    MULTISET EXCEPT
    并 交 差 ,另外还有
    ALL 全部
    DISTINCT 去重
    var_tab1 := var_tab2 MUSTISET UNION ALL var_tab2

    CARDINALITY 获得嵌套表中元素数目
    CARDINALITY(var_tab1)
    (跟count 有什么不同。。- -!)

    MEMBER OF 运算符
    检测嵌套表的一个元素是否存在
    'xxx' MEMBER OF var_tab1; 返回BOOLEAN

    SET 运算符
    将传入的嵌套表去重后返回
    var_tab1 := SET (var_tab2);

    IS A SET
    判断时候符合每个元素都不同
    result:= var_tab1 IS A SET;

    IS EMPTY
    判断嵌套表是否为空

    COLLECT 运算符
    将值列表作为嵌套表返回,可以配合 CAST 运算符将返回的嵌套表强制转换为一种嵌套表类型。

    SELECT COLLECT(column_name)
    FROM TABLE
    WHERE expr;

    POWERMULTISET

    获得嵌套表的子嵌套表

    SELECT *
    FROM TABLE(
     POWERMULTISET(table_tpye('1','2'))
    );

    获得

    复制代码 代码如下:

    table_type('1')
    table_type('2')
    table_type('1','2')

    注意:PS/SQL 不支持这个

    POWERMULTISET_BY_CARDINALITY

    获得指定长度以下的嵌套表

    SELECT *
    FROM TABLE(
     POWERMULTISET_BY_CARDINALITY(table_tpye('1','2'),2)
    );

    获得

    复制代码 代码如下:

    table_type('1','2')

    PS/SQL 不支持这个

    您可能感兴趣的文章:
    • Oracle 中 table 函数的应用浅析
    • Oracle Table Demo语句应用介绍
    • sql – Oracle中匿名TABLE/VARRAY类型示例详解
    上一篇:oracle RETURNING 子句使用方法
    下一篇:Oracle创建Database Link的两种方式详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    oracle中变长数组varray,嵌套表,集合使用方法 oracle,中,变长,数组,varray,