• 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;
  • 相关阅读:
    input的button和submit的区别
    2016011993 顾思宇 散列函数的应用及其安全性
    结对项目作业报告——四则运算web项目
    读《构建之法》4、17章有感
    2016011993+小学四则运算练习软件项目报告
    读《构建之法》1、2、16章有感
    码出生活
    四则运算
    信息安全作业
    结对项目博客
  • 原文地址:https://www.cnblogs.com/yuchne/p/12920760.html
Copyright © 2020-2023  润新知