plsql-集合-关联数组(下标为数字、字符串)
--*******集合1--关联数组(下标为数字类型)/*plsql集合类型有三种:下面是第一种:关联数组*/declare --定义一个数组类型 --mytable:自己定义的类型名字 --varchar2:类型mytable中元素的类型 --binary_integer:下标索引的数据类型 type mytable is table of varchar2(1000) index by binary_integer; v_mytable mytable; --用刚创建的类型,定义一个变量begin v_mytable(-1) := '河南省汝州市'; v_mytable(0) := '的'; v_mytable(1) := 'S'; --设定下标为1的元素为“chen” 注意元素的下标无限制,可以为负数 v_mytable(2) := 'U'; v_mytable(3) := 'P'; v_mytable(4) := 'A'; v_mytable(5) := 'N'; dbms_output.put_line('数组元素的总数是:' || v_mytable.count); --注意first,last只是取元素的下标值,并不是取元素的值,如下: dbms_output.put_line('第一个元素下标是:' || v_mytable.first || '--第一个元素是:' || v_mytable(v_mytable.first)); dbms_output.put_line('最后一个元素下标是:' || v_mytable.last || '---最后一个元素是:' || v_mytable(v_mytable.last)); --for循环取数组中的值 for v_count in v_mytable.first..v_mytable.last loop dbms_output.put_line(v_mytable(v_count)); end loop;end;
--*******集合2--关联数组(下标为字符串类型)/*这种类型相当于java中的map 键-值对*/declare type string_table is table of varchar2(30) index by varchar2(30); v_mytable string_table; v_record emp%rowtype; cursor c is select ename,job from emp; keyTemp varchar2(30); --集合中存放键的临时变量begin --读取emp表中的前三条记录,存储在集合v_mytable中,最后遍历该集合。 for c_temp in c loop v_mytable(c_temp.ename) := c_temp.job; end loop; dbms_output.put_line(v_mytable.count); --集合中元素(键值对)总数 dbms_output.put_line(v_mytable.first); --集合中第一个元素的键 dbms_output.put_line(v_mytable.last); --集合中最后一个元素的键 --//遍历 keyTemp = v_mytable.first; --取集合中第一个键值对的键赋给临时变量 while (keyTemp is not null) loop --如果第一个元素的键不为空进行循环 dbms_output.put_line('键为: ' || keyTemp || ' 值为:' || v_mytable(keyTemp)); keyTemp := v_mytable.next(keyTemp); end loop;end;