declare
type v_re is record
( name varchar2(20),
age number
);
v_st v_re;type aa is table of v_re index by binary_integer;
a aa;
begin
for i in 1..5000000 loop ---这里的循环数量很大
v_st.name:=''||ROUND(DBMS_RANDOM.VALUE(1,5000);--具体业务需要随机生成
v_st.age :=ROUND(DBMS_RANDOM.VALUE(1,5000);
--这里才是问题关键,向索引表里加入这个数据之前,我需要判断 索引表里 加入的record 是否
--已经存在,就是 name 也相同,age也相同,这里的循环 灰常大,也就是索引表的数据非常多,怎么才能高效解决
加入之前需要先判断是不是已经加入了,必须保持数据唯一性
a(a.count):=v_st;
end loop;
end;
type v_re is record
( name varchar2(20),
age number
);
v_st v_re;type aa is table of v_re index by binary_integer;
a aa;
begin
for i in 1..5000000 loop ---这里的循环数量很大
v_st.name:=''||ROUND(DBMS_RANDOM.VALUE(1,5000);--具体业务需要随机生成
v_st.age :=ROUND(DBMS_RANDOM.VALUE(1,5000);
--这里才是问题关键,向索引表里加入这个数据之前,我需要判断 索引表里 加入的record 是否
--已经存在,就是 name 也相同,age也相同,这里的循环 灰常大,也就是索引表的数据非常多,怎么才能高效解决
加入之前需要先判断是不是已经加入了,必须保持数据唯一性
a(a.count):=v_st;
end loop;
end;
解决方案 »
- oracle执行计划问题
- 一个oracle 修改语句 一直报错 ORA-00927 大家帮忙看下
- Oracle离线下载工具:QDU
- 求购Oracle数据库系统建一数据中心,需要硬件工程师提供硬件解决方案,非诚勿扰
- 怎样在oracle 中导出为文本文件
- 急求!!!!!
- 用console连接数据库时提示:没有监听器。添加本地网络服务名,输入本机IP,连接不成功,改成127.0.0.1才可以???
- ORA-12203:TNS:unable to connect to destination
- 菜鸟求教各位大侠一条SQL语句!(对前后记录进行数学计算)
- 寻找在hp unix上安装oracle8.1.7的步骤,高分相谢!
- 请问,FCF和TAF的区别是什么?
- 下一个时间段处理
可以用oracle异常处理来实现
create or replace procedure sp_test
as
...
begin
--for loop 放这里执行
exception
when DUP_VAL_ON_INDEX then
--主键重复执行此处
--多个主键时,增加对sqlerrm里的主键名称判断
null;
forall 插入 ,这才把数据放入 索引表里的
-------------------- -------------------- ----------
192 1 1
193 1 2
194 1 3
-- 其中A是主键DECLARE
TYPE LIST_TYPE IS TABLE OF VARCHAR2(20) INDEX BY PLS_INTEGER;
mylist LIST_TYPE;
err_cnt NUMBER;
for_all_errors EXCEPTION;
PRAGMA EXCEPTION_INIT(for_all_errors, -24381);
BEGIN
mylist(1) := '201';
mylist(2) := '192';
mylist(3) := '202';
mylist(4) := '193';
FORALL i IN mylist.FIRST .. mylist.LAST save EXCEPTIONS
INSERT INTO t1(A) VALUES (mylist(i));
EXCEPTION
WHEN for_all_errors THEN
err_cnt := SQL%BULK_EXCEPTIONS.COUNT;
FOR i IN 1 .. err_cnt LOOP
dbms_output.put_line('index:' || SQL%BULK_EXCEPTIONS(i).ERROR_INDEX || ' code:' || SQL%BULK_EXCEPTIONS(i).ERROR_CODE);
END LOOP;
COMMIT;
WHEN OTHERS THEN
NULL;
END;-- 结果:
index:2 code:1
index:4 code:1SQL> select * from t1;A B C
-------------------- -------------------- ----------
201
202
192 1 1
193 1 2
194 1 3