数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Oracle复合数据类型(4)


发布日期:2022年10月03日
 
Oracle复合数据类型(4)

使用集合

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

操作整个集合

访问集合中的单个元素

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

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);

上一篇:oracle 基础入门

下一篇:Oracle索引(index)简单介绍