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