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

    语法:

      CREATE OR REPLACE PROCEDURE 存储过程名字
      (
          参数1 IN NUMBER,
          参数2 IN NUMBER
      ) IS
      变量1 INTEGER :=0;
      变量2 DATE;
      BEGIN

      END 存储过程名字;

    参数模式

    :可以在sql窗口写存储过程,写好后点击运行即可创建。

      调用方式一:call 存储过程名(参数列表);

      调用方式二:

        begin
         存储过程名(参数列表);

        end;

    :在命令窗口写存储过程,写完后 ‘/’ 回车 执行。

      调用:EXEC/EXECUTE 存储过程名(参数列表); 

      或 
     BEGIN   存储过程名(参数列表);   END;   /

     调用存储过程方式三:

    删除存储过程

    DROP PROCEDURE procedure-name;

    BEGIN
       DROP PROCEDURE procedure-name
    ; END; /

    案例1:该程序查找两个值中的最小值,这里过程使用IN模式接收两个数字,并使用OUT参数返回它们的最小值。
    DECLARE
       a number;
       b number;
       c number;
    
    PROCEDURE findMin(x IN number, y IN number, z OUT number) IS
    BEGIN
       IF x < y THEN
          z:= x;
       ELSE
          z:= y;
       END IF;
    END; 
    
    BEGIN
       a:= 23;
       b:= 45;
       findMin(a, b, c);
       dbms_output.put_line(' Minimum of (23, 45) : ' || c);
    END;
    /
    案例2:这个程序计算传递值的平方值。这个例子表明我们如何能够用相同的参数接受的值,然后返回另一个结果。
    DECLARE
       a number;
    PROCEDURE squareNum(x IN OUT number) IS
    BEGIN
      x := x * x;
    END; 
    BEGIN
       a:= 23;
       squareNum(a);
       dbms_output.put_line(' Square of (23): ' || a);
    END;
    /
    
    

    方法传递参数

    实际参数可以通过以下三种方式:

      位置标记

      命名符号

      混合符号

      

    位置表示法

     在位置符号,可以调用的程序为:

     findMin(a, b, c, d);

     在位置表示法中,第一实际参数代入所述第一形式参数;第二实际参数代入所述第二形式参数,依此类推。那么,a取代x,b是取代为y,c为取代z以及d被代替m。

    命名表示法

     名为符号,实际参数与使用箭头符号的形式参数相关的(=>)。所以程序调用将如下所示:

    findMin(x=>a, y=>b, z=>c, m=>d);

    混合表示法

    在混合符号表示法中,可以混合这两种写法过程调用;但是,位置标记应先于指定符号。

    
    

      合法的:

      findMin(x=>a, b, c, d);
     

     jdbc调用存储过程

    案例1:无返回值

    create or replace procedure proc_delEmp(id in number) is

    begin

        delete from emp where emp.employee_id = id;

    end proc_delEmp;

    Java调用:

    //加载Oracle的驱动

    Class.forName("oracle.jdbc.driver.OracleDriver");

    //设计连接

    Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "itsource", "itsource");

    //准备好要执行的存储过程(注意语法,传的参数个数)

    CallableStatement call = connection.prepareCall("{call proc_delEmp(?)}");

    call.setLong(1, 106); //第一个位置输入值

    call.executeUpdate(); //执行存储过程

    connection.close();

    call.close();

    案例2:有返回值

    create or replace procedure getEmpNameById(id in number,name out varchar2) is

    begin

      select first_name into name  from emp where employee_id = id;

    end getEmpNameById;

    Java调用:

    public void test() throws Exception {

    //贾涟欲执事

    //加载Oracle的驱动

    Class.forName("oracle.jdbc.driver.OracleDriver");

    //设计连接

    Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "itsource", "itsource");

    //准备好要执行的存储过程(注意语法,传的参数个数)

    CallableStatement call = connection.prepareCall("{call proc_getEmpNameById(?,?)}");

    call.setLong(1, 106); //第一个位置输入值

    call.registerOutParameter(2, Types.VARCHAR); //注册一个输出的值

    call.executeUpdate(); //执行存储过程

    System.out.println(call.getString(2)); //有输出的值可以在这里输出

    connection.close();

    call.close();

    }

  • 相关阅读:
    September 29th 2017 Week 39th Friday
    September 28th 2017 Week 39th Thursday
    September 27th 2017 Week 39th Wednesday
    September 26th 2017 Week 39th Tuesday
    September 25th 2017 Week 39th Monday
    September 24th 2017 Week 39th Sunday
    angular2 学习笔记 ( Form 表单 )
    angular2 学习笔记 ( Component 组件)
    angular2 学习笔记 ( Http 请求)
    angular2 学习笔记 ( Router 路由 )
  • 原文地址:https://www.cnblogs.com/spdboke/p/6870314.html
Copyright © 2011-2022 走看看