oracle中游标与动态sql,ORACLE1.26 综合:游标和动态SQL

--假设分了4个部门(存款部,ATM部,转出,转入)

--每个月定期最后1天自动生成4张表的数据

--(数据来源:deal_record)

--第一步:先把4张表建立起来

--存款表

create table r1(

id number primary key,

card_id varchar2(18),

money number

);

--取款表

create table r2(

id number primary key,

card_id varchar2(18),

money number

);

--转出表

create table r3(

id number primary key,

card_id varchar2(18),

money number

);

create table r4(

id number primary key,

card_id varchar2(18),

money number

);

------------------------------

--思路1,不使用存储过程

--问题:遍历了4次

insert into r1(

select id,card_id,money from deal_record where deal_type=1

)

commit

select * from r1

select * from r2

truncate table r1

--思路2,只遍历1次(游标)

--一边游,一边插入数据

--插入表,不固定(动态SQL)

--带参数的动态SQL (using)

---------------------------

create or replace procedure p_make_record

IS

mydeal deal_record%rowtype;

cursor mycursor is select * from deal_record;

insert_str varchar2(200);

begin

--打开游标

open mycursor;

loop

fetch mycursor into mydeal;

exit when mycursor%notfound;

insert_str:= ‘insert into r‘||mydeal.deal_type||‘ values(:1,:2,:3)‘;

--dbms_output.put_line(insert_str);

execute immediate insert_str using mydeal.id,mydeal.card_id,mydeal.money;

end loop;

commit;

end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值