首页 > Linux操作系统 > Linux操作系统 > PL/SQL数组 一
当你想搜索某一个特定元素的值而不是整个数组的时候,PL/SQL关联数组对于名称-值对类型的数组是非常有用的。应用11g文档的话“它就像一个SQL表的简单版本,你可以基于主键的值来提取值”。
【IT专家网独家】当你想搜索某一个特定元素的值而不是整个数组的时候,PL/SQL关联数组对于名称-值对类型的数组是非常有用的。应用11g文档的话“它就像一个SQL表的简单版本,你可以基于主键的值来提取值”。在PL/SQL中,对于任何数组来说,当用在较少记录中时效率是最高的,例如简单查找表。如果你发现你加载成千上万的记录到数组中,那么你很可能是哪里做错了。
注意,我可以通过名称来简单地访问到一个元素,而不必进行循环。下一个例子显示了怎样对一个关联数组进行循环。这可能看起来与关联数组的意图相反,但是有可能有这种需求:
|
declare |
最后,一个更复杂的使用一个常用记录的例子:
|
declare |
用type:
语法:type <类型名> is table of <数据类型> index by Binarry_integer;
set serveroutput on;
declare
type array_type is table of varchar2(20) index by binary_integer;
my_array array_type;
begin
for I in 1..10 loop
my_array(i):=i*2;
end loop;
for I in 1..10 loop
dbms_output.put_line(to_char(my_array(i)));
end loop;
end;
一个例子:
declare
stmt varchar2(200);
dept_no_array dbms_sql.Number_Table;
c number;
dummy number;
begin
dept_no_array(1) := 10; dept_no_array(2) := 20;
dept_no_array(3) := 30; dept_no_array(4) := 40;
dept_no_array(5) := 30; dept_no_array(6) := 40;
stmt := 'delete from emp where deptno = :dept_array';
c := dbms_sql.open_cursor;
dbms_sql.parse(c, stmt, dbms_sql.native);
dbms_sql.bind_array(c, ':dept_array', dept_no_array, 1, 4);
dummy := dbms_sql.execute(c);
dbms_sql.close_cursor(c);
exception when others then
if dbms_sql.is_open(c) then
dbms_sql.close_cursor(c);
end if;
raise;
end;
/
很久没用oracle了,今天遇到个问题,要读一串数据,实现批量的一个操作,在oracle最好能用数组,找了些资料,示例代码如下:
set serveroutput on;
declare
type mytype is table of varchar2(9);
ssn mytype;
begin
ssn:=mytype('000002204','000047355');
for i in 1..2 Loop
dbms_output.put_line('ssn('||to_char(i)||')='||ssn(i)||chr(13));
end loop;
end;
输出:
ssn(1)=000002204
ssn(2)=000047355
PL/SQL procedure successfully completed
赋值也可以在初始化时用ssn mytype:=mytype('000002204','000047355'); 实现。
实际上,PL/SQL使用一个无界的表来实现数组功能的
【IT168 服务器学院】很长一段时间内,PL/SQL开发人员必须有一个“index-by表”才能创建某个指定数据类型的或者PL/SQL记录的表。因为他们只接受整型数据以从数组中提取数据,所以类型声明的末尾子句以“INDEX BY BINARY_INTEGER”结束。如果想以非整型值作为索引,要么你必须创建一个存储过程来扫描需要的值,要么你必须在一个单独的表上建立一个索引。
set serveroutput on
declare
type valrec is record(key varchar2(50),val varchar2(50));
type valtbl is table of valrec index by binary_integer;
mytbl valtbl;
begin
mytbl(1).key := 'foo';
mytbl(1).val := 'bar';
for i in 1..mytbl.count loop
if mytbl(i).key = 'foo' then
dbms_output.put_line(mytbl(i).val);
end if;
end loop;
end;
/
PL/SQL允许使用index-by表创建某个指定数据类型或者PL/SQL记录的表。然而,如果想以非整型值作为索引,要么你必须创建一个存储过程扫描你需要的值,要么你必须在一个单独的表上建立一个索引。Oracle9i扩展了index-by表的语法,允许字符串类型的索引,叫做关联数组。
有了字符串类型,你现在就可以快速访问元素,而不用再在每个元素间循环或者去知道它在数组中的位置:
set serveroutput on
declare
type valtbl is table of varchar2(50) index by varchar2(50);
mytbl valtbl;
begin
mytbl('foo'):='bar';
dbms_output.put_line(mytbl('foo'));
end;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12330444/viewspace-448414/ ,如需转载,请注明出处,否则将追究法律责任。