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调用需要带括号!!!
  • 相关阅读:
    mysql BETWEEN操作符 语法
    mysql IN操作符 语法
    mysql LIKE通配符 语法
    mysql TOP语句 语法
    mysql DELETE语句 语法
    mysql Update语句 语法
    mysql INSERT语句 语法
    mysql ORDER BY语句 语法
    mysql OR运算符 语法
    mysql AND运算符 语法
  • 原文地址:https://www.cnblogs.com/duguangming/p/10846386.html
Copyright © 2011-2022 走看看