zoukankan      html  css  js  c++  java
  • 嵌套表使用集合操作符 单列或多列均可

    嵌套表使用multiset union,multiset except,multiset intersect等使用集合操作符,往往一般都只是对一列进行比较,但是多列实际上也是可以的:

    以下介绍中,以multiset except操作符为例。


    一、只有一列情况下使用集合操作符

    由以下1,),2),3),4)说明只有一列的情况下使用集合操作符时既可以直接赋值也可以通过sql语句的形式赋值,但是 2)编译出错,原因是 必须将变量类型定义到schma级别,即要么像3)和4)那样直接在外部定义了一个变量,或者直接在包中的包头进行定义

    1)执行成功

    DECLARE
       TYPE typ_id_table1 IS TABLE OF NUMBER;
       tab_fids1 typ_id_table1 := typ_id_table1();
       tab_fids2 typ_id_table1 := typ_id_table1();
       v_result typ_id_table1;
    BEGIN
       v_result := tab_fids1 MULTISET except tab_fids2;
    END ;

    2)执行提示:在SQL语句中不允许使用本地收集类型

    DECLARE
       TYPE typ_id_table1 IS TABLE OF NUMBER;
       tab_fids1 typ_id_table1 := typ_id_table1();
       tab_fids2 typ_id_table1 := typ_id_table1();
       v_result typ_id_table1;
    BEGIN
       SELECT  tab_fids1 MULTISET EXCEPT tab_fids2 INTO v_result FROM DUAL;
    END ;

    3)编译成功

    CREATE OR REPLACE TYPE typ_id_table3 AS TABLE OF NUMBER(10); --在外部定义了变量
    DECLARE
       tab_fids1 typ_id_table3 := typ_id_table3();
       tab_fids2 typ_id_table3 := typ_id_table3();
       v_result typ_id_table3;
    BEGIN
       v_result := tab_fids1 MULTISET except tab_fids2;
    END ;

    4)编译成功

    CREATE OR REPLACE TYPE typ_id_table3 AS TABLE OF NUMBER(10);--在外部定义变量
    DECLARE
       tab_fids1 typ_id_table3 := typ_id_table3();
       tab_fids2 typ_id_table3 := typ_id_table3();
       v_result typ_id_table3;
    BEGIN
       SELECT  tab_fids1 MULTISET EXCEPT tab_fids2 INTO v_result FROM DUAL;
    END ;
     

    二、多列情况下使用集合操作符

    本以为多列的情况下无法使用集合操作符,再次要感谢itpub newkid版主的解答。

    即在使用多列进行比较的时候不能直接比较,而必须改成sql语句的形式进行比较,如下:

    CREATE OR REPLACE TYPE typ_id_object AS OBJECT (gid NUMBER(10),
                                         gno NUMBER(5),
                                         co NUMBER(5));

    CREATE OR REPLACE TYPE typ_id_table AS TABLE OF typ_id_object;
     

    1)编译成功

    DECLARE
       v1 typ_id_table := typ_id_table();
       v2 typ_id_table := typ_id_table();
       v3 typ_id_table;
    BEGIN
       SELECT  v1 MULTISET EXCEPT v2 INTO V3 FROM DUAL; --如果是多列的情况下就必须是这种sql语句的形式
    END;
    2)
    DECLARE
       v1 typ_id_table := typ_id_table();
       v2 typ_id_table := typ_id_table();
       v3 typ_id_table;
    BEGIN
       V3 := v1 MULTISET EXCEPT v2; --如果采用此种形式则会提示:PLS-00306:调用 'MULTISET_EXCEPT_ALL' 时参数个数或类型错误

    END;


  • 相关阅读:
    js中==与===区别
    Initialization failure 0x0000000c
    Spring通过@Value注解注入属性的几种方式
    java中读取配置文件中数据的具体方法
    spring整合hibernate
    url上参数解析笔记
    编号的生成(日期+序列号)
    application.xml & -servlet.xml
    webApplicationContext 与servletContext
    Http协议整理
  • 原文地址:https://www.cnblogs.com/lanzi/p/2312316.html
Copyright © 2011-2022 走看看