ORACLE1.26 综合:游标和动态SQL

Posted 看不见的我

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

以上是关于ORACLE1.26 综合:游标和动态SQL的主要内容,如果未能解决你的问题,请参考以下文章

动态 SQL 和游标相关问题

Oracle动态游标实现动态SQL循环遍历,和静态游标的比较。

在 MySQL 中使用动态 SQL 创建游标

游标内的动态 SQL

oracle动态查询通过sql获取游标变量

动态sql