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();

    }

  • 相关阅读:
    burpsuite抓包-手机端配置
    一个登录页面的测试用例(借鉴他人的,方便查阅)
    ant+jmeter环境搭建
    ant+jmeter(build.xml)亲自试用
    linux监控工具vmstat命令详解(转)
    httpRunner使用小结
    接口自动化测试框架开发总结
    Linux上如何设置nginx开机启动
    如何在Linux Centos上部署配置FastDFS
    Redis的Jedis操作(五)
  • 原文地址:https://www.cnblogs.com/spdboke/p/6870314.html
Copyright © 2011-2022 走看看