oracle的控制结构(二)

2014-11-24 13:06:37 · 作者: · 浏览: 1
---------------------
SQL>create or replace procedure p4(pName varchar2) is
v_num number := 11;--控制循环的变量,初始值为1
begin
while v_num < 21 loop
insert into users values(v_num,pName);
v_num := v_num + 1;--自增1
end loop
end;
/
SQL>exec p3('arthur');
---------------------------------------------------------------------------
9)null,null语句不会执行任何操作,并且会直接将控制传递到下一条语句,主要好处是增加了PL/sql的可读性
10)编写分页过程
例子1):编写一个过程,可以向book表添加书,要求通过java程序调用
---------------------------------------------------------------------
--in代表bookID为输入变量,其实in是默认的,
--out:表示一个输出参数
--这是一个无返回值的过程
SQL>create or replace procedure p5(bookID in number,bookName in varchar2,publicHouse in varchar2) is
begin
insert into book values(bookID,bookName,publicHouse);
end;
/
---------------------------------------------------------------------
通过java代码调用该过程
--------------------------------------------------------------------- www.2cto.com
//加载驱动
Class.forName("oracle.jdbc.driver. OracleDriver");
Connection ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:MYORA1","userName","passWord")
CallableStatement cs = ct.prepareCall("{call p5( , , )}");
//给?赋值
cs.setInt(1,10);
cs.setString(2,"星辰变");
cs.setString(3,"新华出版社");
//执行
cs.execute();
//关闭资源操作,此处省略
例子2):有返回的存储过程
编写一个过程,可以输入员工的编号,返回该员工的姓名,工资和岗位
---------------------------------------------------------------------
-- 有输入和输出的存储过程
SQL>create procedure p6(bianHao in number,name out varchar2,pSal out number,pJob out varchar2) is
begin
select ename,sal,job into name,pSal,pJob from emp where empno = bianHao;
end;
/
---------------------------------------------------------------------
在java里面获得上述过程中的姓名
--------------------------------------------------------------------- www.2cto.com
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:
CallableStatement cs = ct.prepareCall("{call p6( , , , )}");
//给第一个?赋值
cs.setInt(1,8888);
//给第二个?赋值
cs.registOutPrameter(2,oracle.jdbc.OracleTypes.VARCHAR);
cs.registOutPrameter(3,oracle.jdbc.OracleTypes.DOUBLE);
cs.registOutPrameter(4,oracle.jdbc.OracleTypes.VARCHAR);
//执行
cs.execute();
//取出返回值,以为返回值是第二个?,所以是2
String name = cs.getString(2);
String job = cs.getString(4);
//关闭相关资源,此处略写