• 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存储过程基本语法与基础教程 

  • 相关阅读:
    uva11572 Unique Snowflakes
    codeforces#333 div2 B. Approximating a Constant Range
    uva11134 Fabled Rooks
    吐槽。。。
    uva 1605 Building for UN
    uva 120 Stacks of Flapjacks
    uva1152 4 Values whose Sum is 0
    uva817 According to Bartjens
    uva11214 Guarding the Chessboard
    无标题
  • 原文地址:https://www.cnblogs.com/liuyp-ken/p/5751550.html
Copyright © 2020-2023  润新知