zoukankan      html  css  js  c++  java
  • oracle 存储过程示例

    create or replace procedure autorun_yjxxzdts
    as
    v_begintime date;
    v_endtime date;
    v_ErrMsg varchar2(4000);
    v_rownum varchar2(500);
    cursor c1 is select code,dtxxlb, name, rylb, sjqj, yjcs,execsql from b_zdtsgz where sfzy='1';
    v_sql VARCHAR2(4000);
    v_rylbname varchar2(100);
    v_insertrow number;
    BEGIN
    delete TEMP_ZDTSRY;
    delete zdtsry;
    commit;
    for i in c1 loop
    v_begintime := sysdate;
    v_rownum := '0';
    v_endtime := sysdate;
    begin
    v_sql := i.execsql;
    v_sql := replace(v_sql, '[CODE_REPLACE]', i.code);--编码
    v_sql := replace(v_sql, '[NAME_REPLACE]', replace(replace(i.name, '[SJQJ_REPLACE]', i.sjqj), '[YJCS_REPLACE]', i.yjcs));--名称

    BEGIN
    select name into v_rylbname from codeinfo where codetype_id=(select id from codetype where typename='重点人员类别') and code=i.rylb;
    EXCEPTION
    WHEN NO_DATA_FOUND
    THEN
    v_rylbname := '';
    END;
    v_sql := replace(v_sql, '[RYLB_REPLACEMC]', v_rylbname);--替换重点人员类别名称
    v_sql := replace(v_sql, '[RYLB_REPLACE]', i.rylb);--替换重点人员类别
    v_sql := replace(v_sql, '[SJQJ_REPLACE]', i.sjqj);--替换时间区间参数
    v_sql := replace(v_sql, '[YJCS_REPLACE]', i.yjcs);--替换预警次数参数
    v_sql := replace(v_sql, '[DTXXLB_REPLACE]', i.dtxxlb);--替换动态信息类型参数
    EXECUTE IMMEDIATE v_sql;
    v_insertrow:=sql%rowcount;
    EXCEPTION
    WHEN OTHERS THEN
    v_endtime := sysdate;
    v_ErrMsg := SUBSTR(SQLERRM, 1 , 1024);
    INSERT INTO S_ETL_LOG(ID, BEGINTIME, DATE_CREATED, ENDTIME, ETLDESC, ETLMSG, ETLNAME, ETLOK)
    VALUES (hibernate_sequence.Nextval, v_begintime, SYSDATE, v_endtime, 'autorun_yjxxzdts', v_ErrMsg, '预警信息重点推送(临时表)', 'E');
    END;
    -- dbms_output.put_line(v_sql);
    end loop;

    insert into zdtsry (id, version, sfzh, fhcount, zdtsgname, zdtsgzid,yjid)
    select hibernate_sequence.nextval, 0, sfzh, C, n, zd, yjid from
    (select sfzh,count(1) C ,zdtsgname as n ,zdtsgzid as zd,yjid from TEMP_ZDTSRY where yjid not in (select yjid from zdtsry) group by yjid ,zdtsgname, sfzh, zdtsgzid);
    commit;
    END;

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    v_ErrMsg varchar2(4000);    定义变量

     CURSOR 游标名( 参数 列表)   [返回值类型]   IS   Select 语句;

    for in loop形式循环

    execsql字段语句中存在变量,使用replace函数给变量替换成具体的值

    存储过程异常处理:运行查询语句后没有查到数据

    BEGIN

                 select name into v_rylbname from codeinfo where codetype_id=(select id from codetype where typename='重点人员类别') and code=i.rylb;

             EXCEPTION

             WHEN NO_DATA_FOUND

             THEN

                 v_rylbname := '';

             END;

    EXECUTE IMMEDIATE v_sql;:动态执行sql存储过程

    sql%rowcount用于记录修改的条数

    输出sql语句到控制台:dbms_output.put_line(v_sql);

    该存储过程在最后向ZDRYTS表中插入数据

    insert into zdtsry (id, version, sfzh, fhcount, zdtsgname, zdtsgzid,yjid)

      select hibernate_sequence.nextval, 0, sfzh, C, n, zd, yjid from

      (select sfzh,count(1) C ,zdtsgname as n ,zdtsgzid as zd,yjid  from TEMP_ZDTSRY where  yjid not in (select yjid from zdtsry) group by yjid ,zdtsgname, sfzh, zdtsgzid);

    Commit 提交事务      commit的提交针对的是:DML

    Rollback 回滚事务

    当能力支撑不了野心时,就该静下心来学习!
  • 相关阅读:
    对Spring Boot 及Mybatis简单应用
    云时代架构读后感(十)
    云时代架构读后感(九)
    云时代架构读后感(八)
    云时代架构读后感(七)
    云时代架构读后感(六)
    关于mysql,sqlserverl,与oracle数据库连接总结
    云时代架构读后感(五)
    javaweb实现添加课程
    javaweb入门(使用SQLserver2008 R2数据库)
  • 原文地址:https://www.cnblogs.com/1234cjq/p/7273933.html
Copyright © 2011-2022 走看看