设为首页 加入收藏

TOP

(韩顺平讲解)pl/sql编程(二)(二)
2015-07-24 11:52:15 来源: 作者: 【 】 浏览:14
Tags:顺平 讲解 pl/sql 编程
nn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL", "scott", "0108"); CallableStatement cs = conn.prepareCall("{call sp_pro7(?,?,?)}"); //给?赋值 cs.setInt(1, 10); cs.setString(2, "天龙八部"); cs.setString(3, "清华大学出版社"); //执行 cs.execute(); cs.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } } }2.案例:编写一个过程,可以输入雇员的编号,返回该雇员的姓名。
案例扩张:编写一个过程,可以输入雇员的编号,返回该雇员的姓名、工资和岗位。
Sql代码
--有输入和输出的存储过程
create or replace procedure sp_pro8
(spno in number, spName out varchar2) is
begin
select ename into spName from emp where empno=spno;
end
--在java中调用
package com.oracle.demo;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;

public class Procedure_08_Test {
	
	public static void main(String[] args) {
		
		try {
			
			Class.forName("oracle.jdbc.driver.OracleDriver");
			Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", 
					"scott", "0108");
			CallableStatement cs = conn.prepareCall("{call sp_pro8(?,?)}");
			
			//给第一个?赋值
			cs.setInt(1, 7788);
			//给第二个?赋值   
			cs.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);
			//执行   
			cs.execute();
			
			//取出返回值,要注意?的顺序
			String name = cs.getString(2);
			System.out.println(name);

			cs.close();
			conn.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
3.案例:有返回值的存储过程(列表[结果集])。编写一个过程,输入部门号,返回该部门所有雇员信息。
由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,
但由于是集合,所以不能用一般的参数,必须要用pagkage了,步骤如下:
①建一个包。
②建立存储过程。
③下面看看如何在java程序中调用
1.建立一个包,在该包中,我定义类型test_cursor,是个游标。 如下:
Sql代码
create or replace package testpackage as
TYPE test_cursor is ref cursor;
end testpackage;
2.建立存储过程。如下:
Sql代码
create or replace procedure sp_pro9(spNo in number,p_cursor out testpackage.test_cursor) is
begin
open p_cursor for
select * from emp where deptno = spNo;
end sp_pro9;
3.如何在java程序中调用该过程
package com.oracle.demo;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;

public class Procedure_09_Test {
	
	public static void main(String[] args) {
	
		try {

			Class.forName("oracle.jdbc.driver.OracleDriver");
			Connection ct = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl",
					"scott", "0108");
			CallableStatement cs = ct.prepareCall("{call sp_pro9(?,?)}");
			
			cs.setInt(1, 10);
			cs.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);
			
			cs.execute();
			
			ResultSet set = (ResultSet) cs.getObject(2);
			while (set.next()) {
				System.out.println(set.getInt(1)+ " " + set.getString(2));
				
			}
			
			cs.close();
			ct.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
4.编写分页过程
Sql代码
select t1.*, rownum rn from (select * from emp) t1 where rownum<=10;
select * from (select t1.*, rownum rn from (select * from emp) t1 where rownum<=10) where rn>=6;
--开发一个包
--建立一个包,在该包中,我定义类型test_cursor,是个游标。 如下:
Sql代码
create or replace package testpackage as
TYPE test_cursor is ref cursor;
end testpackage;
--开始编写分页的过程
create or replace procedure fenye
(tableName in varchar2,
pagesize in number,--一页显示记录数
pageNow in number,
myrows out number,--总记录数
myPageCo
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇"oracle Universal Installe.. 下一篇sql基础之DDL(DataDefinitionLang..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C语言结构体怎么直接 (2025-12-24 17:19:44)
·为什么指针作为c语言 (2025-12-24 17:19:41)
·如何较为深入的理解c (2025-12-24 17:19:38)
·Announcing October (2025-12-24 15:18:16)
·MySQL有什么推荐的学 (2025-12-24 15:18:13)