Oracle复合数据类型(4)

ukiuykjhk

ukiuykjhk

2016-02-19 21:12

想要天天向上,就要懂得享受学习。图老师为大家推荐Oracle复合数据类型(4),精彩的内容需要你们用心的阅读。还在等什么快点来看看吧!

使用集合

  象记录一样,集合可以在两个层面上使用:

   . 操作整个集合

   . 访问集合中的单个元素

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  第一种情况使用集合名,第二种情况使用下标:

   collection(subscript)

  index_by表的下标是两为的整数,可以为正也可以为负,范围是:-2147483647--2147483647。嵌套表和VARRAY表示元素在集合中的位置,用户很难灵活设计下标,这是因为:

   . 嵌套表开始是紧密的(相对于疏松)

   . VARRAY始终保持紧密

   . 这两种集合的下标都由1开始

  初始化、删除、引用集合

  使用集合之前必须要初始化,对于Index_by表初始化是自动进行的,但是对于嵌套表和VARRAY就必须使用内建的构造函数。如果重新调用,嵌套表和VARRAY自动置NULL,这不只是元素置NULL,而是整个集合置NULL。给集合内的元素赋值需要使用下标符号。将一个集合的值赋给另一个集合,只需要简单的使用赋值操作符。

  Index_by集合初始化是最简单的,只要涉及其中的一个元素集合就被初始化了。

  例: 


DECLARE

TYPE symbol_tab_typ IS TABLE OF VARCHAR2(5) 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
--初始化集合元素147和-3
SELECT * INTO account_tab(147)
FROM accounts WHERE account_nbr=147;

SELECT * INTO account_tab(-3)
FROM accounts WHERE account_nbr=3003;

IF account_tab(147).balance500 THEN
chang_maintenance_fee(147);
END IF

new_acct_tab:=account_tab;
symbol_tab(1):="ORCL";
symbol_tab(2):="CSCO";
symbol_tab(3):="SUNM";

publish_portfolio(symbol_tab);

  嵌套表和VARRAY由构造函数初始化,构造函数和集合的名字相同,同时有一组参数,每个参数对应一个元素,如果参数为NULL,那么对应的元素就被初始化为NULL,如果创建了元素,但没有填充数据,那么元素将保持null值,可以被引用,但不能保持数据。如果元素没有初始化,那么就不能引用该元素。

  例:


DECLARE

TYPE stock_list IS TABLE OF stock.symbol%TYPE;
TYPE top10_list IS VARRAY (10) OF stocks.symbol%TYPE;
biotech_stocks stock_list;
tech_10 top10_list;

BEGIN
--非法,集合未初始化。
biotech_stocks(1):='AMGN';
IF biotech_stocks IS NULL THEN
--初始化集合
biotech_stocks:=('AMGN','BGEN',IMCL','GERN',CRA');
END IF;
tech_10:=top10_list('ORCL',CSCO','MSFT','INTC','SUNW','IBM',NULL,NULL);
IF tech_10(7) IS NULL THEN
tech_10(7):='CPQ';
END
tech_10(8):='DELL';
 

  在这个例子中,嵌套表BIOTECH_STOCKS初始化有5个元素,VARRAY tech_10集合最多能有10 个元素,但构造函数只创建了8个元素,其中还有两个元素是NULL值,并程序中给他们赋值。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  初始化基于记录的集合,就必须将记录传递给构造函数,注意不能只是简单的将记录的域传递给构造函数。

  例:


DECLARE

TYPE stock_quote_rec IS RECORD
(symbol stock.symbol%TYPE
,bid NUMBER(10,4)
,ask NUMBER(10,4)
,volume NUMBER NOT NULL:=0
);
TYPE stock_tab_typ IS TABLE OF stock_quote_rec;
quote_list stock_tab_typ;
single_quote stock_quote_rec;

BEGIN
single_quote.symbol:='OPCL';
single_quote.bid:=100;
single_quote.ask:=101;
single_quote.volume:=25000;
--合法
quote_list:=stock_tab_typ(single_quote);
--不合法
quote_list:=stock_tab_typ('CSCO',75,76,3210000);
DBMS_OUTPUT.LINE(quote_list(1).bid);

展开更多 50%)
分享

猜你喜欢

Oracle复合数据类型(4)

编程语言 网络编程
Oracle复合数据类型(4)

Oracle复合数据类型(2)

编程语言 网络编程
Oracle复合数据类型(2)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Oracle复合数据类型(1)

编程语言 网络编程
Oracle复合数据类型(1)

Oracle复合数据类型(3)

编程语言 网络编程
Oracle复合数据类型(3)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Oracle 9i的数据类型

编程语言 网络编程
Oracle 9i的数据类型

ASP数据类型

ASP
ASP数据类型

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Html:对Web页面元素的绝对唯一引用方法

Html:对Web页面元素的绝对唯一引用方法

Oracle入门心得(2)

Oracle入门心得(2)
下拉加载更多内容 ↓