Oracle 綜合:游標和動態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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM