资讯·论坛·笑话大全·QQ表情·设为首页
发新话题
打印

详解使用文字下标简化“PL/SQL”的技巧

详解使用文字下标简化“PL/SQL”的技巧

以前称为INDEX BY表格的联合数组就一直是PL/SQL的一项功能。它们是稀松数组,这意味着它们只存储所装载的元素,不会为中间目录值保留空间。然而,它们的一个原始局限在于下标(即INDEX BY的“目录”)必须为整数。
8 F1 F; m( U/ p# x, F* c3 o" `我爱电脑技术社区--打造最好的电脑技术自学交流平台
/ b0 w3 c& K  B" q& s1 E8 F" A电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站) Z& `5 t( \9 k( W% r3 t/ N
Oracle 9i第2版扩充了这一功能,允许以文字为下标。这使得联合数组更像是其它语言,如Perl中的杂凑表格。
* a$ \( N5 G5 @, {打造最好的电脑自学交流论坛我爱电脑技术论坛. X( M* `( Q+ O) Q4 j! l+ [

: E; k0 v4 i/ V, c+ l0 U电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站为说明文字字符串可成为目录值,简单使用INDEX BY VARCHAR2(用最大长度完成),不要使用惯常的INDEX BY BINARY_INTEGER。下面是一个实例: 打造最好的电脑自学交流论坛/ o: D/ B# m" i) c

/ q& n; Q# t+ {, _% q- C; t我爱电脑技术社区--打造最好的电脑技术自学交流平台' J. S; B& _! i* h% r- u0 M5 Q! Z
TYPE counters_type IS TABLE OF BINARY_INTEGER
0 B8 I; U/ H* m! ?www.520diannao.comINDEX BY VARCHAR2(20);
) Z7 T) N; r& p& Q6 k# {打造最好的电脑自学交流论坛region_counts? COUNTERS_TYPE;www.520diannao.com& J( \$ A( r/ ]

7 |& |4 b$ f8 ?' N9 _, }# j电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
7 d9 }9 [! J! C" v/ m电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站要处理联合数组的单个元素,使用一个VARCHAR2变量或文字作下标。下面的语句更新了region_counts的一个元素。
  E. m% R( g  ^7 O6 E$ X7 g我爱电脑技术社区--打造最好的电脑技术自学交流平台
, `: n+ T' |) Lwww.520diannao.com
1 x- Q6 _7 C2 E1 F- l4 ~# q电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站region_counts('Southwest') := region_counts('Southwest') + 1;
8 q; l6 w9 g& U+ G# P4 Y6 N我爱电脑技术社区--打造最好的电脑技术自学交流平台
) C3 M& Y5 t6 Z$ V" i" \我爱电脑技术社区--打造最好的电脑技术自学交流平台电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站  c0 C  W* I9 _# l( }1 f
要遍历一个联合数组的所有元素,使用集合方法.FIRST、 .NEXT('key')、 .PRIOR('key')和.LAST,如下面的代码所示(假定v_sub以前声明为VARCHAR2)。
$ B" B( R" k- vwww.520diannao.com
+ }5 O  @4 n( S我爱电脑技术社区--打造最好的电脑技术自学交流平台电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站) i* ^1 H; ?2 d% t  n- r# |$ X
v_grand_total := 0;
/ g, l' F& r+ d$ q: }4 }打造最好的电脑自学交流论坛v_sub := region_counts.FIRST; 我爱电脑技术社区--打造最好的电脑技术自学交流平台. u8 _2 U, v0 M0 i3 a+ G
WHILE v_sub IS NOT NULL LOOP
$ N' L  @% o7 q" d3 M9 S) c, n3 Y打造最好的电脑自学交流论坛v_grand_total := v_grand_total + region_counts(v_sub); 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站! W" ]8 q$ g$ C; B( m# u3 @+ V0 h
v_sub := region_counts.NEXT(v_sub); 我爱电脑技术论坛1 \6 N) D. e; Q3 t
END LOOP;
* ~. p# F3 w/ Pwww.520diannao.com 我爱电脑技术论坛7 r7 F# L+ d6 j7 j1 K# {
我爱电脑技术论坛: V: C- x; a+ R6 ]. j; C" F2 X
直接使用文字可简化你的代码。在前面的版本中,程序可能使用一个两列的INDEX BY数组:一列存储地区名称,另一列存储总数量。为更新计数器,代码首先在第一列中搜索地区代码。一旦发现正确的下标,它将更新总数列中的对应项目。
  ?3 D) S' l( f7 n' T我爱电脑技术论坛
  P/ ]$ B$ ^  d' a  G9 K# _" T" h. T
) V. S3 @5 w5 c' A9 V我爱电脑技术社区--打造最好的电脑技术自学交流平台列表A说明了上述联合数组技巧。它声明一个叫做counters_type的数组类型,然后建立一个那种类型的称做region_counts的实例。增加数据、进行更新、并继续用文字作下标进行处理。 我爱电脑技术论坛: \( l2 @  J/ |! c' w) v1 K: e; @

% O2 A( t" p1 }8 l$ H9 e我爱电脑技术社区--打造最好的电脑技术自学交流平台
7 a0 \7 Z6 Y4 W+ u% }我爱电脑技术论坛即使一个联合数组能够使用集合方法,它也不能像嵌套表格一样作为列存储在数据库中。在PL/SQL程序中,当决定用哪种集合类型进行临时存储时,请务必要记住这一点。

TOP

发新话题