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

    存储过程:
      存储过程是在oracle中存取完成特定业务逻辑的代码块。存储过程是命名块。命名块会存储到数据库中。匿名块每次运行都需要提前编译。命名块一次存储,只会编译一次。命名块可以多次使用。
      创建存储过程的语法:
        create [or replace ] procedure 存储过程的名称[(参数名 [in/out/ inout ] 参数类型,参数名 ....)]is/as
          变量声明部分
        begin
          业务逻辑处理部分
        exception
          异常处理部分
        end;
    注意:
    1,存储过程名称一般以pro_开头
    2,存储过程可以没有参数 ,如果没有参数不用加()
    3,过程的参数分三种, 入参 in 出参out 出入参inout 如果不写,默认是in。通过定义多个出参 过程可以返回多个
    参数
    4,过程或者函数的参数定义类型的时候不能有精度
     
    举例:使用pl sql声明一个存储过程 传一个员工编号的参数 返回员工的姓名和基本工资
    -- 创建存储过程 输入员工编号 返回员工姓名 基本工资
    create or replace procedure pro_emp_test(v_empno number,v_ename
    out varchar2,v_sal out number)
    is
    --变量声明部分
    begin
    --业务逻辑处理部分
    select ename ,sal into v_ename,v_sal from emp where empno=v_empno;
    end;
    使用匿名块调用存储过程:
    --匿名块中调用存储过程
    declare
    -- 声明参数用来接收出参
    v_ename emp.ename%type;
    v_sal emp.sal%type;
    begin
    --调用存储过程
    pro_emp_test(7369,v_ename,v_sal);
    -- 调用过程之后 v_ename 和v_sal就有值了 可以打印结果
    dbms_output.put_line('员工姓名:'||v_ename||'员工基本工资:'||v_sal);
    end;
     
    举例:写存储过程 ,输入员工编号,在过程中打印员工的姓名和基本工资
    -- 创建存储过程 输入员工编号 打印员工姓名 基本工资
    create or replace procedure pro_emp_test2(v_empno number)
    is
    --变量声明部分
    v_ename varchar2(100);
    v_sal emp.sal%type;
    begin
    --业务逻辑处理部分
    select ename ,sal into v_ename,v_sal from emp where empno=v_empno;
    --打印结果
    dbms_output.put_line('员工姓名:'||v_ename||',员工基本工资:'||v_sal);
    end;
    对于没有出参的过程,我们可以通过call关键字执行调用:
    -- 通过call 调用没有出参的存储过程
    call pro_emp_test2(7369);
    过程传递参数的三种方式
    举例:写一个过程,在过程中打印三个数的和
    --定义存储过程 计算三个数的和 create or replace procedure pro_sum_test(v_num1 number,v_num2
    number,v_num3 number)
    is
    -- 声明和的变量 v_sum number(10,2);
    begin v_sum:=v_num1+v_num2+v_num3;
    dbms_output.put_line('v_num1:'||v_num1||'+v_num2:'||v_num2||'+v_num3:'||v_num3||
    '=v_sum:'||v_sum );
    end;
    按位置传参
    原先我们调用存储过程的方式就是通过按位置传递参数。
    -- 按位置传递参数
    call pro_sum_test(1,2,3);
    按名称传参
    按位置传参不容易看出哪个参数是什么含义,所以我们也可以使用按形参名称的方式传参数
    -- 按名称的方式传递参数
    call pro_sum_test(v_num2=>2,v_num1=>1,v_num3=>3);
    注意:按名称传递参数使用=>关键字,传递参数的时候名称必须和过程的形参名称一致
    按位置传参 优点:容易理解 缺点:不容易看到每个参数代表什么含义
    按名称传参 优点:容易看到每个参数代表什么汉含义 缺点:传递参数是名称必须要和形参名称一致,如果修改形
    参名称了,调用这个过程的所有的地方都要修改。
    按位置和名称传参
    传递参数的时候我们可以混合使用按位置和按名称的方式,不过要保证先按位置传递参数,再按名称传递。
    -- 按名称的方式传递参数
    call pro_sum_test(v_num2=>2,v_num1=>1,v_num3=>3);
    -- 混合传递参数 必须先按位置 再按名称传递
    call pro_sum_test(1,v_num3=>3,v_num2=>2);
    -- 不能先按名称 再按位置传递
    call pro_sum_test(v_num2=>2,v_num1=>1,3);
    注:创建过程,没有参数可以不写括号,但是call调用需要带括号!!!
  • 相关阅读:
    《Linux shell编程中 diff与vimdif的使用》RHEL6
    《mysql数据库备份小脚本》
    《linux下sudo服务的使用》RHEL6
    《通过脚本查看哪些ip被占用》shell笔记
    linux系统环境变量.bash_profile/bashrc文件
    清空系统日志shell scripts——自学笔记
    《linux源代码包的编译安装》RHEL6
    《linux 网卡别名的添加和绑定》RHEL6
    《iptables详解 》RHEL6
    转:swagger 入门
  • 原文地址:https://www.cnblogs.com/duguangming/p/10846386.html
Copyright © 2011-2022 走看看