zoukankan      html  css  js  c++  java
  • Oracle 存储过程学习笔记

    1、存储过程简单实例

    CREATE OR REPLACE PROCEDURE  存储过程名称 (参数in,参数out)
    AS
    -- 变量声明,每个声明用分号结束。可以在声明的同时初始化 
    name varchar2(50);
    age number(8) default 0;
    
    --开始逻辑运算
    BEGIN
    
    --业务逻辑
    
    END

    2、游标实现方式、

    --显式实现方式(可以实现多值)

    cursor cursorVar is select event_id, isagain, rate from call_event where sender = v_sender;   -- 声明游标,select语句可以包括单引号等。
      
    begin  
        open cursorVar;    -- 打开游标  
        loop  
             fetch cursorVar into v_event_id, v_isagain, v_rate;       -- 取值  
             exit when cursorVar%notfound;                             --当没有记录时退出循环  
             dbms_output.put_line(v_event_id || ', ' || v_isagain || ', ' || v_rate);  
        end loop;  
         
        close cursorVar;   -- 关闭游标  
         
        --游标的属性有:%FOUND,%NOTFOUNRD,%ISOPEN,%ROWCOUNT;   
        --%FOUND:已检索到记录时,返回true   
        --%NOTFOUNRD:检索不到记录时,返回true   
        --%ISOPEN:游标已打开时返回true   
        --%ROWCOUNT:代表检索的记录数,从1开始   
    end;  

    --隐式游标(可以实现查询多值)

    for currow in (  
       select t.col1, t.col2  
       from tableName t  
       where ...  
    ) loop  
        if currow.col1 = 0 then  
           return;    -- 中止sp,返回  
       end if;  
    end loop; 

    --带参数的游标(可以实现查询多值)

    declare  
    isok integer;  
    v_event_id number(10);  
    v_isagain number(2);  
    v_rate number(2);  
      
    v_sender char(11) := '13800138000';  
      
    cursor cursorVar(p_sender varchar2) is select event_id, isagain, rate from call_event where sender = p_sender; -- 声明游标  
      
    begin  
        open cursorVar(v_sender);    -- 打开游标,在括号里传参。  
        loop  
             fetch cursorVar into v_event_id, v_isagain, v_rate;       -- 取值  
             exit when cursorVar%notfound;                             --当没有记录时退出循环  
             dbms_output.put_line(v_event_id || ', ' || v_isagain || ', ' || v_rate);  
        end loop;  
         
        close cursorVar;   -- 关闭游标  
    end;  

    3、异常处理

    EXCEPTION 
       WHEN OTHERS THEN 
          vs_msg := 'ERROR IN xxxxxxxxxxx_p('||is_ym||'):'||SUBSTR(SQLERRM,1,500);
     
       ROLLBACK; 
    
       --把当前错误记录进日志表。 
       INSERT INTO LOG_INFO(proc_name,error_info,op_date) 
       VALUES('xxxxxxxxxxx_p',vs_msg,SYSDATE); 
       COMMIT; 
       RETURN; 

    参考oracle存储过程基础语法+提升+例子总结

           Oracle存储过程基本语法与基础教程 

  • 相关阅读:
    jeecg接口开发及权限实现原理
    Jeecg中通过Spring_AOP+注解方式实现日志的管理
    Jeecg踩坑不完全指南
    在jeecg中如何配置多对一和多对多的关系
    一致性哈希算法
    到底什么是哈希Hash?
    如何正确实现 Java 中的 HashCode
    Hash和HashCode深入理解
    关于源码
    MySQL存储过程的创建及调用
  • 原文地址:https://www.cnblogs.com/liuyp-ken/p/5751550.html
Copyright © 2011-2022 走看看