Oracle中的数组
2010-04-21 14:04
oracle中构造数组的例子:
declare
type t_varray is varray(4) of number;
arr t_varray;
begin
arr := t_varray(1,2,3,4);
for i in 1..arr.count loop
dbms_output.put_line(arr(i));
end loop;
end;
构造二维数组的例子:
declare
type t_varray is varray(4) of number;
type t_varray_varray is varray(3) of t_varray;
arr t_varray;
v_arr t_varray_varray;
begin
arr := t_varray(1,2,3,4);
v_arr := t_varray_varray(arr,arr,arr);
for i in 1..v_arr.count loop
for j in 1..v_arr(i).count loop
dbms_output.put(v_arr(i)(j));
if (j = v_arr(i).count) then
dbms_output.put_line('');
end if;
end loop;
end loop;
end;
除了使用varray,还可以使用索引表构造数组。使用索引表定义数组,不需要指定数组的上限,数组的大小只与内存限制有关。而且索引组织表定义是指定的索引项并不一定要是数值。(下一个例子是sys用户中的例子)
DECLARE
TYPE T_TAB IS TABLE OF NUMBER INDEX BY VARCHAR2(30);
V_VAR T_TAB;
V_STR VARCHAR2(30);
BEGIN
FOR I IN (SELECT OWNER, COUNT(*) CN from DBA_TABLES GROUP BY OWNER) LOOP
V_VAR(I.OWNER) := I.CN;
END LOOP;
V_STR := V_VAR.FIRST;
WHILE (V_VAR.EXISTS(V_STR)) LOOP
DBMS_OUTPUT.PUT_LINE(RPAD(V_STR, 20, ' ') || ':' || V_VAR(V_STR));
V_STR := V_VAR.NEXT(V_STR);
END LOOP;
END;
如果构造二维以上的数组,且维度不全是数值,那么就需要注意了:
DECLARE
TYPE T_NUM_TAB IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
TYPE T_VAR_TAB IS TABLE OF NUMBER INDEX BY VARCHAR2(10);
TYPE T_NUM_VAR IS TABLE OF T_NUM_TAB INDEX BY VARCHAR2(10);
TYPE T_VAR_NUM IS TABLE OF T_VAR_TAB INDEX BY BINARY_INTEGER;
V_NUM_VAR T_NUM_VAR;
V_VAR_NUM T_VAR_NUM;
BEGIN
V_NUM_VAR(5)('A') := 1;
V_VAR_NUM('A')(5) := 1;
END;
&nbs
相关文档:
查看回收站中表
select object_name,original_name,partition_name,type,ts_name,createtime,droptime from recyclebin;
恢复表
SQL
>flashback table test_drop to before drop;或
SQL
>flashback table "BIN$b+XkkO1RS5K10uKo9BfmuA==$0" to befor ......
最近做短信群发项目有一个需求,需要客户大批量(十万级)导入数据.
开始是用insert单条数据,10万条数据要20分钟
后来发现可以用insert all 一条sql一次导入500条记录,这样10万条数据只用了1.5分钟,导入速度提高了近来20倍
下面就使用insert all的心得体会记录如下.
使用方法:
insert all into table_name(col_1,col_2) v ......
Oracle外部身份认证研究
密码文件认证 操作系统认证 remote_login_passwordfile SQLNET.AUTHENTICATION_SERVICES &nb ......
CREATE OR REPLACE PROCEDURE kevin_proc(x varchar) IS
a VARCHAR(20);
b VARCHAR(20);
CURSOR mycur(rn NUMBER) IS SELECT * from t_kevin_test WHERE ROWNUM<rn;
BEGIN
OPEN mycur(10);
LOOP FETCH mycur INTO a,b;
EXIT WHEN mycur%NOTFOUND;
Dbms_Output.put_line('a: '||a);
Dbms_Output.put_line('b: '| ......
大致分为三部份,1.SQL,2.ERP本身,3.本机
1.如果是SQL导出时出现,乱码可以通过修改NLS_LANG,来避免乱码,
繁体修改成:TRADITIONAL CHINESE_TAIWAN.ZHT16BIG5
简体修改成: SIMPLIFIED CHINESE_CHINA.ZHS16GBK
英文就不用说了!!
2.如果是ERP export 时出现乱码,可以通过设置profile来设置FND: NATIVE CLIENT ENC ......