熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle復合數據類型(4)

2013-11-13 22:20:36  來源: Oracle 

  使用集合
  
  象記錄一樣集合可以在兩個層面上使用
  
   操作整個集合
  
   訪問集合中的單個元素
  
  第一種情況使用集合名第二種情況使用下標
  
  collection(subscript)
  
  index_by表的下標是兩為的整數可以為正也可以為負范圍是嵌套表和VARRAY表示元素在集合中的位置用戶很難靈活設計下標這是因為
  
   嵌套表開始是緊密的(相對於疏松)
  
   VARRAY始終保持緊密
  
   這兩種集合的下標都由開始
  
  初始化刪除引用集合
  
  使用集合之前必須要初始化對於Index_by表初始化是自動進行的但是對於嵌套表和VARRAY就必須使用內建的構造函數如果重新調用嵌套表和VARRAY自動置NULL這不只是元素置NULL而是整個集合置NULL給集合內的元素賦值需要使用下標符號將一個集合的值賦給另一個集合只需要簡單的使用賦值操作符
  
  Index_by集合初始化是最簡單的只要涉及其中的一個元素集合就被初始化了
  
  例
  
  DECLARE
  
  TYPE symbol_tab_typ IS TABLE OF VARCHAR() INDEX BY BINARY_INTEGER;
  TYPE account_tab_typ IS TABLE OF account%ROWTYPE INDEX BY BINARY_INTEGER;
  symbol_tab symbol_tab_typ;
  account_tab account_tab_typ;
  new_acct_tab account_tab_typ;
  
  BEGIN
  初始化集合元素
  SELECT * INTO account_tab()
  FROM accounts WHERE account_nbr=;
  
  SELECT * INTO account_tab()
  FROM accounts WHERE account_nbr=;
  
  IF account_tab()balance< THEN
  chang_maintenance_fee();
  END IF
  
  new_acct_tab:=account_tab;
  symbol_tab():=ORCL;
  symbol_tab():=CSCO;
  symbol_tab():=SUNM;
  
  publish_portfolio(symbol_tab);
  
  嵌套表和VARRAY由構造函數初始化構造函數和集合的名字相同同時有一組參數每個參數對應一個元素如果參數為NULL那麼對應的元素就被初始化為NULL如果創建了元素但沒有填充數據那麼元素將保持null值可以被引用但不能保持數據如果元素沒有初始化那麼就不能引用該元素
  
  例
  
  DECLARE
  
  TYPE stock_list IS TABLE OF stocksymbol%TYPE;
  TYPE top_list IS VARRAY () OF stockssymbol%TYPE;
  biotech_stocks stock_list;
  tech_ top_list;
  
  BEGIN
  非法集合未初始化
  biotech_stocks():=AMGN;
  IF biotech_stocks IS NULL THEN
  初始化集合
  biotech_stocks=(AMGNBGENIMCLGERNCRA);
  END IF;
  tech_:=top_list(ORCLCSCOMSFTINTCSUNWIBMNULLNULL);
  IF tech_() IS NULL THEN
  tech_():=CPQ;
  END
  tech_():=DELL;
  
  在這個例子中嵌套表BIOTECH_STOCKS初始化有個元素VARRAY tech_集合最多能有 個元素但構造函數只創建了個元素其中還有兩個元素是NULL值並程序中給他們賦值
  
  初始化基於記錄的集合就必須將記錄傳遞給構造函數注意不能只是簡單的將記錄的域傳遞給構造函數
  
  例
  
  DECLARE
  
  TYPE stock_quote_rec IS RECORD
  (symbol stocksymbol%TYPE
  bid NUMBER()
  ask NUMBER()
  volume NUMBER NOT NULL:=
  );
  TYPE stock_tab_typ IS TABLE OF stock_quote_rec;
  quote_list stock_tab_typ;
  single_quote stock_quote_rec;
  
  BEGIN
  single_quotesymbol:=OPCL;
  single_quotebid:=;
  single_quoteask:=;
  single_quotevolume:=;
  合法
  quote_list:=stock_tab_typ(single_quote);
  不合法
  quote_list:=stock_tab_typ(CSCO);
  DBMS_OUTPUTLINE(quote_list()bid);
From:http://tw.wingwit.com/Article/program/Oracle/201311/18831.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.