1. 程式人生 > >ORACLE1.26 綜合:遊標和動態SQL

ORACLE1.26 綜合:遊標和動態SQL

exec _id otf dia 1.2 car num str ber

-- 假設分了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