pl╱sql入门指南doc(编辑修改稿)内容摘要:
ote_rec。 variable 域定义时的 %TYPE 属性用于引用数据库中 的表或视图的数据类型和大小 ,而在此之前程序不知道类型和大小。 在上面的例子中记录域在编译时将被定义为与列 SYMBOL 相同的数据类型和大小 ,当代码中要使用来自数据库中的数据时,在变量或域定义中最好使用 %TYPE 来定义。 隐式定义记录 隐式定义记录中,我们不用描述记录的每一个域。 这是因为我们不需要定义记录的结构,不需要使用 TYPE 语句,相反在声明记录变量时使用 %ROWTYPE 命令定义与数据库表,视图,游标有相同结构的记录,与 TYPE 命令相同的是它是一种定义获得数据库数据记录的好方法。 DECLARE accounter_info accounts%ROWTYPR。 CURSOR xactions_cur(acct_no IN VARCHAR2) IS SELECT action,timestamp,holding FROM portfolios WHERE account_nbr=39。 acct_no39。 xaction_info xactions_cur%ROWTYPE。 variable 有一些 PL/SQL 指令在使用隐式定义记录时没有使用 %ROWTYPE 属性,比如游标 FOR 循环或触发器中的 :old 和 :new记录。 DELCARE CURSOR xaction_cur IS SELECT action,timeamp,holding FROM portfolios WHERE account_nbr=39。 3739。 BEGIN FOR xaction_rec in xactions_cur LOOP IF =39。 ORCL39。 THEN notify_shareholder。 END IF。 END LOOP。 使用记录 用户可以给记录赋值、将值传递 给其他程序。 记录作为一种复合数据结构意味作他有两个层次可用。 用户可以引用整个记录,使用 select into 或 fetch转移所有域,也可以将整个记录传递给一个程序或将所有域的值赋给另一个记录。 在更低的层次,用户可以处理记录内单独的域,用户可以给单独的域赋值或者在单独的域上运行布尔表达式,也可以将一个或更多的域传递给另一个程序。 引用记录 记录由域组成,访问记录中的域使用点( .)符号。 我们使用上面的例子看看 DELCARE TYPE stock_quote_rec IS RECORD (symbol %TYPE ,bid NUMBER(10,4) ,ask NUMBER(10,4) ,volume NUMBER NOT NULL:=0 ,exchange VARCHAR2(6) DEFAULT 39。 NASDAQ39。 )。 TYPE detailed_quote_rec IS RECORD (quote stock_quote_rec ,timestamp date ,bid_size NUMBER , NUMBER ,last_tick VARCHAR2(4) )。 real_time_detail detail_quote_rec。 BEGIN :=1000。 :=156700。 log_quote()。 给记录赋值 给记录或记录中的域赋值的方法有几种,可以使用 SELECT INTO 或 FETCH 给整个记录或单独的域赋值, 可以将整个记录的值赋给其他记录,也可以通过给每个域赋值来得到记录,以下我们通过实例讲解每一种赋值方法。 使用 SELECT INTO 使用 SELECT INTO给记录赋值要将记录或域放在 INTO子串中, INTO子串中的变量与 SELECT中列的位置相对应。 例: DECLARE stock_info1 stocks%ROWTYPE。 stock_info2 stocks%ROWTYPE。 BEGIN SELECT symbol,exchange INTO , FROM stocks WHERE symbol=39。 ORCL39。 SELECT * INTO stock_info2 FROM stocks WHERE symbol=39。 ORCL39。 使用 FETCH 如果 SQL 语句返回多行数据或者希望使用带参数的游标,那么就要使用游标,这种情况下使用FETCH 语句代替 INSTEAD INTO 是一个更简单、更有效率的方法,但在安全性较高的包中 FETCH的语法如下: FETCH cursor_name INTO variable。 我们改写上面的例子: DECLARE CURSOR stock_cur(symbol_in VARCHAR2) IS SELECT symbol,exchange,begin_date FROM stock WHERE symbol=UPPER(symbol_in)。 stock_info stock_cur%ROWTYPE BEGIN OPEN stock_cur(39。 ORCL39。 )。 FETCH stock_cur INTO stock_info。 使用赋值语句将整个记录复制给另一个记录是一项非常有用的技术,不过记录必须精确地被声明为相同的类型,不能是基于两个不同的 TYPE 语句来获得相同的结构。 例: DECLARE TYPE stock_quote_rec IS RECORD (symbol %TYPE ,bid NUMBER(10,4) ,ask number(10,4) ,volume NUMBER )。 TYPE stock_quote_too IS RECORD (symbol %TYPE ,bid NUMBER(10,4) ,ask number(10,4) ,volume NUMBER )。 这两个记录看上去是一样的,但实际上是不一样的 stock_one stocks_quote_rec。 stock_two stocks_quote_rec。 这两个域有相同的数据类型和大小 stock_also stock_rec_too; 与 stock_quote_rec 是不同的数据类型 BEGIN :=39。 orcl39。 :=1234500。 stock_two: =stock_one。 正确 syock_also: =stock_one。 错误,数据类型错误 :=。 :=。 记录不能用于 INSERT语句和将记录直接用于比较,下面两种情况是错误的: INSERT INTO stocks VALUES (stock_record)。 和 IF stock_rec1stock_rec2 THEN 要特别注意考试中试题中有可能用 %ROWTYPE 来欺骗你,但这是错误的,记住这一点。 还有可能会出现用记录排序的情况, ORACLE 不支持记录之间的直接比较。 对于记录比较,可以采用下面的两个选择: . 设计一个函数,该函数返回 scalar 数据类型,使用这个函数比较记录,如 IF sort_rec(stock_one)sort_rec(stock_two) THEN . 可以使用数据库对象,数据库对象可以使用 order 或 map 方法定义,允许 oracle 对复合数据类型进行比较。 关于数据库对象的讨论已经超越了本文的范围,要详细了解数据库对象,可以查阅oracle 手册。 PL/SQL 集合 集合与其他语言中的数组相似,在 及以前的版本中只有一种集合称为 PL/SQL 表,这种类型的集合依然保留,就是索引( INDEX_BY)表,与记录相似,集合在定义的时候必须使用TYPE 语句,然后才是创建和使用这种类型的变量。 集合的类型 PL/SQL 有三种类型的集合 . Index_by表 . 嵌套表 . VARRAY 这三种类型的集合之间由许多差异,包括数据绑定、稀疏性 (sparsity)、数据库中的存储能力都不相同。 绑定涉及到集合中元素数量的限制, VARRAY集合中的元素的数量是有限, Index_by和嵌套表则是没有限制的。 稀疏性描述了集合的下标是否有间隔, Index_by表总是稀疏的,如果元素被删除了嵌套表可以是稀疏的,但 VARRAY类型的集合则是紧密的,它的下标之间没有间隔。 Index_by表不 能存储在数据库中,但嵌套表和 VARRAY可以被存储在数据库中。 虽然这三种类型的集合有很多不同之处,但他们也由很多相似的地方: . 都是一维的类似数组的结构 . 都有内建的方法 . 访问由点分隔 Index_by 表 Index_by表集合的定义语法如下: TYPE type_name IS TABLE OF element_type [NOT NULL] INDEX BY BINARY_INTERGET。 这里面重要的关键字是 INDEX BY BINARY_INTERGET,没有这个关键字,那么集合将是一个嵌套表, element_type 可以是任何合法的 PL/SQL 数据类型,包括: PLS/INTEGER、 SIGNTYPE、和 BOOLEAN。 其他的集合类型对数据库的数据类型都有限制,但 Index_by表不能存储在数据库中,所以没有这些限制。 一旦定义了 index_by表,就可以向创建其他变量那样创建 index_by表的变量: DECLARE TYPE symbol_tab_typ IS TABLE OF VARCHAR2(5) INDEX BY BINARY_INTEGER。 symbol_tab symbol_tab_typ。 BEGIN 嵌套表 嵌套表非常类似于 Index_by表,创建的语法也非常相似。 使用 TYPE 语句,只是没有 INDEX BY BINARY_INTEGER 子串。 TYPE type_name IS TABLE OF element_type [NOT NULL] NOT NULL 选项要求集合所有的元素都要有值, element_type 可以是一个记录,但是这个记录只能使用标量数据类型字段以及只用于数据库的数据类型( 不能是 PLS_INTEGER,BOOLEAN 或SIGNTYPE)。 嵌套表和 VARRAY都能作为列存储在数据库表中,所以集合自身而不是单个的元素可以为NULL,ORACLE 称这种整个集合为 NULL 的为 自动设置为 NULL(atomically NULL)以区别元素为NULL 的情况。 当集合为 NULL 时,即使不会产生异常,用户也不能引用集合中的元素。 用户可以使用 IS NULL 操作符检测集合是否为 NULL。 存储在一个数据库中的嵌套表并不与表中的其它数据存放在同一个数据块中,它们实际上被存放在第二个 表中。 正如没有 order by子句 select 语句不能保证返回任何有顺序的数据,从数据库中取回的嵌套表也不保证元素的顺序。 由于集合数据是离线存储的,对于大型集合嵌套表是一个不错的选择。 VARRAY VARRAY或数据变量都有元素的限制。 想起他集合一样 VARRAY定义仍然使用 TYPE 语句,但关键字 VARRAY或 VARRYING ARRAY告诉 ORACLE 这是一个 VARRAY集合。 TYPE type_name IS [VARRAY|VARYING ARRAY] (max_size) OF element_type [NOT NULL] max_size 是一个整数,用于标示 VARRAY集合拥有的最多元素数目。 VARRAY集合的元素数量可以低于 max_size,但不能超过 max_size。 element_type 是一维元素的数据类型,如果element_type 是记录,那么这个记录只能使用标量数据字段(与嵌套标相似)。 NOT NULL 子串表示集合中的每一个元素都必须有值。 与嵌套表相似, VARRAY能够自动为 NULL,可以使用 IS NULL 操作符进行检测。 与嵌套表不同的是,当 VARRAY存 储在数据库中时与表中的其他数据存放在同一个数据块中。 正象列的排序保存在表的 SELECT*中一样元素的顺序保存在 VARRAY中。 同样由于集合是在线存储的, VARRAY很适合于小型集合。 使用集合 象记录一样,集合可以在两个层面上使用: . 操作整个集合 . 访问集合中的单个元素 第一种情况使用集合名,第二种情况使用下标: collection(subscript) index_by表的下标是两为的整数,可以为正也可以为负,范围是: 2147483647。pl╱sql入门指南doc(编辑修改稿)
相关推荐
,老师教我们怎么写作文吗。 老师说:你开头要这样,中间要这样,春天是这样的,秋天 是那样的。 情绪要从低潮开始,然后到高潮结束。 结果呢。 本来你会写的,结果还没开始写,就想到自己是不是该低潮还是高潮了。 然后,就完全连话都不会说了。 PPT的制作是一样的。 如果你一开始,就去想,我该用什么模板好看,用多大的字,换场的时候,是不是可以多用几个不同的方式。 那么,可以说,一开始,就走岔了路。
子公司转入 Poly公司。 她在西门子美国分公司的小型和中型转换器销售部任主任。 Rambo女士将其近 20年在远程通讯工业的经验带给了 Poly公司。 Rambo女士持有欧柏林大学学士学位和卡内基迈隆大学工业管理硕士学位。 Benjamin 共同市场开发部副总裁 Tatta先生从互联网络 ConcreteMedia公司来到 Poly 公司 ,他在Concrete Media 公司
the schedule, the budget and the tecbnical requirements. These responsibilities are part of wbich process: A. Executing B. Controlling C. Planning D. Closing 9. You are one of four fulltime project
check if this MO m’tl is ok. 7. out P/L status . OP or E/I to book space. in touch with OFD about all status. 8. with OP about container and W/H packing. Receive Action Memo Put into MPS Daily
s? A. Cost planning B. Cost estimating C. Cost budgeting D. Cost control ANS: c Reference: PMBOK 72. The time phased budget that is used to measure and monitor cost performance is: A. The project
产品,一般分为:基于乘积项( ProductTerm)技术, EEPROM(或 Flash)工艺的中小规模 PLD,以及基于查找表( LookUp table)技术, SRAM 工艺的大规模 PLD/FPGA。 EEPROM 工艺的 PLD 密度小,多用于 5,000 门以下的小规模设计,适合做复杂的组合逻辑,如译码。 SRAM 工艺的 PLD(FPGA),密度高,触发器多,多用于 10,000