oracle集合类型应用举例

--condition--
create table t1(id int);
create table t2(id int);
create table t3(id int);

create or replace package aa_test is

-- Author : tom
-- Created : 2010-5-10 17:04:24
-- Purpose :

type tom_re is record(
id t1.id%type);

type tom_insert_tab is table of tom_re index by binary_integer;

tom_insert_array tom_insert_tab;

procedure tom_insert(iv_tom_insert_array in tom_re);

procedure tom_print;

procedure tom_print1;

procedure tom_print2;

procedure tom_print3;

end aa_test;


create or replace package body aa_test is

procedure tom_insert(iv_tom_insert_array in tom_re) is
begin
insert into t3 (id) values (iv_tom_insert_array.id);
end tom_insert;

procedure tom_print is
cursor cur_tom is
select * from t1;
begin
open cur_tom;
loop
fetch cur_tom bulk collect
into tom_insert_array; --这种情况,只循环一遍--

for i in 1 .. tom_insert_array.count loop
dbms_output.put_line('----' || tom_insert_array(i).id);
end loop;

exit when cur_tom%notfound;

end loop;

close cur_tom;
dbms_output.put_line('----' || tom_insert_array.count);
tom_insert_array.delete; --清空数组--
dbms_output.put_line('----' || tom_insert_array.count);
end tom_print;

procedure tom_print1 is
cursor cur_tom is
select * from t1;
begin
open cur_tom;

fetch cur_tom bulk collect
into tom_insert_array; --这种情况,只循环一遍--

for i in 1 .. tom_insert_array.count loop
dbms_output.put_line('----' || tom_insert_array(i).id);
end loop;

close cur_tom;
end tom_print1;

procedure tom_print2 is
cursor cur_tom is
select * from t1;
v_id integer;
begin
open cur_tom;
loop
fetch cur_tom
into v_id; --循环多遍--
exit when cur_tom%notfound;
dbms_output.put_line('--v_id--' || v_id); --这种情况需要放exit后面--
end loop;

close cur_tom;
end tom_print2;


procedure tom_print3 is
cursor cur_tom is
select * from t1;
begin
open cur_tom;

fetch cur_tom bulk collect
into tom_insert_array; --这种情况,只循环一遍--

for i in 1 .. tom_insert_array.count loop
tom_insert(tom_insert_array(i));
dbms_output.put_line('--insert times:--'|| i);
end loop;
close cur_tom;

commit;
end tom_print3;

end aa_test;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle中,自定义类含有map、order、constructor的应用场合可以是: 1. 数据库中存储复杂数据类 在一些情况下,我们需要在Oracle数据库中存储具有复杂结构的数据,例如一个包含多个字段的对象或者一个包含键值对的集合。此时,我们可以使用自定义类来定义这些数据类,并且在数据库中进行存储和检索。 举例说明: 我们可以定义一个包含姓名、年龄和地址的人员对象: ``` CREATE TYPE person AS OBJECT ( name VARCHAR2(50), age NUMBER, address VARCHAR2(100) ); ``` 我们也可以定义一个包含多个键值对的集合对象: ``` CREATE TYPE student AS OBJECT ( scores MAP VARCHAR2(50), -- 键值对 order MEMBER FUNCTION get_score(subject VARCHAR2) RETURN NUMBER -- 获取成绩 ); ``` 2. PL/SQL中的复杂数据类 在PL/SQL中,我们也可以使用自定义类来定义复杂的数据类,以便在程序中更方便地处理数据。 举例说明: 我们可以定义一个包含多个字段的结构体类: ``` CREATE TYPE emp_type IS OBJECT ( empno NUMBER, ename VARCHAR2(50), job VARCHAR2(50), mgr NUMBER, hiredate DATE, sal NUMBER, comm NUMBER, deptno NUMBER ); ``` 我们也可以定义一个包含键值对的集合类: ``` CREATE TYPE score_type IS TABLE OF NUMBER INDEX BY VARCHAR2(50); ``` 3. 跨平台数据传输 在不同的应用程序或系统之间进行数据传输时,可能会涉及到不同的数据类和数据格式。此时,我们可以使用自定义类来定义数据类,并且在不同的平台之间进行数据传输。 举例说明: 我们可以定义一个包含姓名、年龄和地址的人员对象: ``` CREATE TYPE person_type AS OBJECT ( name VARCHAR2(50), age NUMBER, address VARCHAR2(100) ); ``` 然后,我们可以在Java程序中使用JDBC来访问Oracle数据库,并且将person_type对象进行序列化和反序列化,以便在Java程序和Oracle数据库之间进行数据传输。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值