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

  • 相关阅读:
    DEDECMS里面DEDE函数解析
    dede数据库类使用方法 $dsql
    DEDE数据库语句 DEDESQL命令批量替换 SQL执行语句
    织梦DedeCms网站更换域名后文章图片路径批量修改
    DSP using MATLAB 示例 Example3.12
    DSP using MATLAB 示例 Example3.11
    DSP using MATLAB 示例 Example3.10
    DSP using MATLAB 示例Example3.9
    DSP using MATLAB 示例Example3.8
    DSP using MATLAB 示例Example3.7
  • 原文地址:https://www.cnblogs.com/liuyp-ken/p/5751550.html
Copyright © 2020-2023  润新知