zoukankan      html  css  js  c++  java
  • Oracle 存储过程 PROCEDURE

    存储过程  

        一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。

        包含三部分:过程声明,执行过程部分,存储过程异常(可选)。

    示例

    create or replace procedure sp_
    (  p_sResult   out integer,--返回值
       p_ID       in   number --ID
    ) 
    as
          v_id       number(16);
          cursor  v_chac_cr  is
                    select t.money from T001 t   where t.sid=p_ID;--游标
    begin
       open v_chac_cr();
       loop
            fetch v_chac_cr into v_id; 
            exit when v_chac_cr%notfound;
            insert into F002(cnt)  values (v_id);
       end loop;
       close v_chac_cr;
       commit;
       p_sResult:=1;
    exception--例外处理
       when others then
       p_sResult:=0;
       rollback;
    end sp_;  

     项目运用

      1.获取表下一个ID值

    CREATE OR REPLACE PROCEDURE PNEXTID
    (
     tablename   IN   VARCHAR2 ,
     idno     OUT   NUMBER
    )
    IS
     sqlstring   VARCHAR2 ( 500 );
    BEGIN
     sqlstring := 'SELECT nvl(max(id),0)+1 FROM ' ||tablename;
      execute immediate sqlstring into idno;               -- 动态执行
      merge into tSequence a using ( select idno as ID, tablename as Name from dual) b   --组合成表   merge into 确定表
      on (upper(a.Name)=upper(b.Name))                       --表名大写化
      when matched then update set a.ID= case when b.ID>a.ID then b.ID else a.ID+ 1 end   -- update;  case when   then  else  end;
      when not matched then insert (ID, Name ) values (b.ID,b.Name);                           --insert;
      select ID into idno from tSEQUENCE WHERE upper( name ) = upper(tablename);
    EXCEPTION
      WHEN OTHERS THEN
       idno := - 1 ;
    END pNextID;
    

     2.返回列表数据(游标)

    CREATE OR REPLACE PROCEDURE SP_CONTENT (
          o_result out types.cursorType, --结果集
          ip_pwf  in varchar2) --关联流程     
    as
       /*  --类型声明是游标变量
        create or replace package TestPackage is type outlist is ref cursor;
     */
      v_sql varchar2(1000);
      vn_count  numeric(12,0);
      vn_num    numeric(12,0);
      vn_id     numeric(12,0);
      vs_table  varchar2(30);
      vn_inst numeric(12,0);
    begin
       vn_count:=length(ip_pwf);
       vn_num:=instr(ip_pwf,'.');
       vn_id:=to_number(substr(ip_pwf,1,vn_num-1));
       vs_table:=substr(ip_pwf,vn_num+1,vn_count-vn_num);
     begin
     v_sql:='select nvl(max(job_code),0)  from '||vs_table||' where company = '||vn_id||'';
     execute immediate v_sql into vn_inst;
     exception
       when others then
       vn_inst:=0;
     end;
     open o_result for
     select caller,enddate,content from tuser t where class_code < vn_inst;
    end SP_CONTENT;
    

      

     

  • 相关阅读:
    JS 数组及函数的应用
    JavaScript 基础知识点
    利用css布局效果图
    css 区块与盒子模型
    JS数组及函数的应用
    JavaScript基础
    近期总结12.30
    层叠样式与盒子模型
    PHP课后小结 2017.12.22
    PHP课后小结 12.20
  • 原文地址:https://www.cnblogs.com/walkwithmonth/p/9382366.html
Copyright © 2011-2022 走看看