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

}

 

posted on 2017-05-18 00:39  好好学习,天天睡觉  阅读(1546)  评论(0编辑  收藏  举报