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

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

    Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常。

    1 create or replace procedure 过程名
    2 as  ...;      --声明语句段
    3 begin
    4 ...;          --执行语句段
    5 exception     --异常处理语句段
    6     ...;
    7 end;
     1 create or replace procedure runbyparmeters  (isal in emp.sal%type, 
                                sname out varchar,sjob in out varchar)
     2  as icount number;   --声明语句段
     3  begin    --执行语句段
     4       select count(*) into icount from emp where sal>isal and job=sjob;
     5       if icount=1 then
     6         ....
     9       else
    10         ....
    12       end if;
    13  exception  --异常处理语句段
    14       when too_many_rows then
    15       DBMS_OUTPUT.PUT_LINE('返回值多于1行');
    16       when others then
    17       DBMS_OUTPUT.PUT_LINE('在RUNBYPARMETERS过程中出错!');
    18  end;
    19 

    存储过程名定义:包括存储过程名和参数列表,参数名和参数类型,参数名不能重复, 参数传递方式:IN, OUT, IN OUT 
    IN 表示输入参数,按值传递方式。 
    OUT 表示输出参数,可以理解为按引用传递方式。可以作为存储过程的输出结果,供外部调用者使用。 
    IN OUT 即可作输入参数,也可作输出参数。 
    参数的数据类型只需要指明类型名即可,不需要指定宽度,参数的宽度由外部调用者决定。 
    过程可以有参数,也可以没有参数 
    变量声明块:紧跟着的as (is )关键字,可以理解为pl/sql的declare关键字,用于声明变量。 
    变量声明块用于声明该存储过程需要用到的变量,它的作用域为该存储过程。另外这里声明的变量必须指定宽度。遵循PL/SQL的变量声明规范。 
    过程语句块:从begin 关键字开始为过程的语句块。存储过程的具体逻辑在这里来实现。 
    异常处理块:关键字为exception ,为处理语句产生的异常。该部分为可选 
    结束块:由end关键字结果。

    在Oracle中对存储过程的调用

    过程调用方式一

     1 declare
     2        realsal emp.sal%type;
     3        realname varchar(40);
     4        realjob varchar(40);
     5  begin   --存储过程调用开始
     6        realsal:=1100;
     7        realname:='';
     8        realjob:='CLERK';
     9        runbyparmeters(realsal,realname,realjob);    --必须按顺序
    10        DBMS_OUTPUT.PUT_LINE(REALNAME||'   '||REALJOB);
    11  END;  --过程调用结束
    12 

     过程调用方式二

     1 declare
     2       realsal emp.sal%type;
     3       realname varchar(40);
     4       realjob varchar(40);
     5 begin    --过程调用开始
     6       realsal:=1100;
     7       realname:='';
     8       realjob:='CLERK';
     9       runbyparmeters(sname=>realname,isal=>realsal,sjob=>realjob);  --指定值对应变量顺序可变
    10       DBMS_OUTPUT.PUT_LINE(REALNAME||'   '||REALJOB);
    11 END;  --过程调用结束
    12
  • 相关阅读:
    分布式进程
    T1008 选数 codevs
    P1364 医院设置 洛谷
    T1046 旅行家的预算 codevs
    T1164 统计数字 codevs
    codevs——T1860 最大数||洛谷——P1107 最大整数
    手动脱Mole Box V2.6.5壳实战
    手动脱FSG壳实战
    手动脱NsPacK壳实战
    手动脱UPX 壳实战
  • 原文地址:https://www.cnblogs.com/wakey/p/4486344.html
Copyright © 2011-2022 走看看