举例如何使用bulk collect into , extend(), multiset union,dbms_metadata.get ddl?


----BULK COLLECT INTO
DECLARE
  TYPE REC_NORMAL IS RECORD(
    COLUMN_NAME     USER_IND_COLUMNS.COLUMN_NAME%TYPE,
    COLUMN_POSITION USER_IND_COLUMNS.COLUMN_POSITION%TYPE);
  TYPE NNT_NORMAL IS TABLE OF REC_NORMAL;
     L_NNT_NORMAL1 NNT_NORMAL := NNT_NORMAL();
 
      SELECT UIC.COLUMN_NAME, UIC.COLUMN_POSITION
      BULK COLLECT
      INTO L_NNT_NORMAL1
      FROM USER_IND_COLUMNS UIC
     WHERE UIC.INDEX_NAME = 'XIE1MV_STYLE'
      AND NOT EXISTS (SELECT 1
              FROM USER_IND_EXPRESSIONS UIE
             WHERE UIC.INDEX_NAME = UIE.INDEX_NAME
               AND UIC.TABLE_NAME = UIE.TABLE_NAME);
           DBMS_OUTPUT.PUT_LINE(L_NNT_NORMAL1.COUNT);
     END;
     /



-------EXTEND()
DECLARE
TYPE NNT_VAR1 IS TABLE OF NUMBER;
L_NTT_VAR1 NNT_VAR1:=NNT_VAR1();
BEGIN
---DBMS_OUTPUT.put_line( L_NTT_VAR1.COUNT);
L_NTT_VAR1.EXTEND();
L_NTT_VAR1(1):=(888);
L_NTT_VAR1.EXTEND(3);
L_NTT_VAR1.EXTEND(3,1);
DBMS_OUTPUT.put_line( L_NTT_VAR1.COUNT);
DBMS_OUTPUT.put_line( L_NTT_VAR1.LAST);
FOR I IN 1..L_NTT_VAR1.COUNT
  LOOP
    DBMS_OUTPUT.PUT_LINE(I||':' ||TO_CHAR(L_NTT_VAR1(I)));
  END LOOP I;
END;
/
------如果不加EXTEND() 会有什么现象?
ORA-06532: Subscript outside of limit
ORA-06512: at line 68


-----MULTISET UNION
DECLARE
   TYPE   NNT_VAR1 IS TABLE OF NUMBER;
   NNT1   NNT_VAR1 := NNT_VAR1(21,31,78);
   NNT2   NNT_VAR1 := NNT_VAR1(10,20,30,40);
   NNT3   NNT_VAR1;
BEGIN
   NNT3 := NNT1 MULTISET UNION NNT2;
   DBMS_OUTPUT.PUT_LINE(NNT3.COUNT);
END;
/

DECLARE
   TYPE   NNT_VAR1 IS TABLE OF NUMBER;
   NNT1   NNT_VAR1 := NNT_VAR1(20,31);
   NNT2   NNT_VAR1 := NNT_VAR1(10,20,30,40);
   NNT3   NNT_VAR1;
BEGIN
   NNT3 := NNT1 MULTISET UNION DISTINCT NNT2;
   DBMS_OUTPUT.PUT_LINE(NNT3.COUNT);
END;
/

DECLARE
   TYPE   NNT_VAR1 IS TABLE OF NUMBER;
   NNT1   NNT_VAR1 := NNT_VAR1();
   NNT2   NNT_VAR1 := NNT_VAR1();
   NNT3   NNT_VAR1;
BEGIN
   NNT3 := NNT1 MULTISET UNION NNT2;
   DBMS_OUTPUT.PUT_LINE(NNT3.COUNT);
END;
/


FUNCTION get_ddl ( object_type IN VARCHAR2,
name IN VARCHAR2,
schema IN VARCHAR2 DEFAULT NULL,
version IN VARCHAR2 DEFAULT 'COMPATIBLE',
model IN VARCHAR2 DEFAULT 'ORACLE',
transform. IN VARCHAR2 DEFAULT 'DDL') RETURN CLOB;

----dbms_metadata包中的get_ddl

----1.表或索引的ddl

SELECT DBMS_METADATA.GET_DDL('TABLE','MV_STYLE','POSUSER') FROM DUAL;
select dbms_metadata.get_ddl('INDEX','XIE1MV_STYLE','POSUSER') from dual;

----2.所有表,索引,存储过程的DDL

SELECT DBMS_METADATA.GET_DDL(U.OBJECT_TYPE, u.object_name)
FROM USER_OBJECTS u
where U.OBJECT_TYPE IN ('TABLE','INDEX','PROCEDURE');
 
------3.所有表空间的DDL

SELECT DBMS_METADATA.GET_DDL('TABLESPACE', TS.tablespace_name)
FROM DBA_TABLESPACES TS;

------4.创建用户的DDL

SELECT DBMS_METADATA.GET_DDL('USER',U.username)
FROM DBA_USERS U;

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值