存储过程(分页显示)

2019-03-22 15:42

20.PL/SQL分页

编写分页过程 介绍??

分页是任何一个网站(bbs,网上商城,blog)都会使用到的技术,因此学习pl/sql 编程开发就一定要掌握该技术。 无返回值的存储过程??

古人云:欲速则不达,为了让大家伙比较容易接受分页过程编写,我还是从简单 到复杂,循序渐进的给大家讲解。首先是掌握最简单的存储过程,无返回值的存 储过程:

案例:现有一张表book,表结构如下: 书号 书名 出版社

请写一个过程,可以向book 表添加书,要求通过java 程序调用该过程。 --in:表示这是一个输入参数,默认为in --out:表示一个输出参数 Sql 代码

1. create or replace procedure sp_pro7(spBookId in number,spbookNa me in varchar2,sppublishHouse in varchar2) is 2. begin

3. insert into book values(spBookId,spbookName,sppublishHouse); 4. end; 5. /

--在java 中调用 Java 代码

1. //调用一个无返回值的过程 2. import java.sql.*; 3. public class Test2{

4. public static void main(String[] args){ 5.

6. try{

7. //1.加载驱动

8. Class.forName(\9. //2.得到连接

10. Connection ct = DriverManager.getConnection(\racle:thin@127.0.0.1:1521:MYORA1\11.

12. //3.创建CallableStatement

13. CallableStatement cs = ct.prepareCall(\7(?,?,?)}\14. //4.给?赋值

15. cs.setInt(1,10);

16. cs.setString(2,\笑傲江湖\17. cs.setString(3,\人民出版社\18. //5.执行

19. cs.execute();

20. } catch(Exception e){ 21. e.printStackTrace(); 22. } finally{

23. //6.关闭各个打开的资源 24. cs.close(); 25. ct.close(); 26. } 27. } 28.}

执行,记录被加进去了

有返回值的存储过程(非列表)??再看如何处理有返回值的存储过程:

案例:编写一个过程,可以输入雇员的编号,返回该雇员的姓名。

案例扩张:编写一个过程,可以输入雇员的编号,返回该雇员的姓名、工资和岗 位。

Sql 代码

1. --有输入和输出的存储过程

2. create or replace procedure sp_pro8

3. (spno in number, spName out varchar2) is 4. begin

5. select ename into spName from emp where empno=spno; 6. end; 7. /

Java 代码

1. import java.sql.*; 2. public class Test2{

3. public static void main(String[] args){ 4.

5. try{

6. //1.加载驱动

7. Class.forName(\8. //2.得到连接

9. Connection ct = DriverManager.getConnection(\racle:thin@127.0.0.1:1521:MYORA1\10.

11. //3.创建CallableStatement

12. /*CallableStatement cs = ct.prepareCall(\ro7(?,?,?)}\13. //4.给?赋值

14. cs.setInt(1,10);

15. cs.setString(2,\笑傲江湖\16. cs.setString(3,\人民出版社\17.

18. //看看如何调用有返回值的过程 19. //创建CallableStatement

20. /*CallableStatement cs = ct.prepareCall(\ro8(?,?)}\21.

22. //给第一个?赋值 23. cs.setInt(1,7788); 24. //给第二个?赋值

25. cs.registerOutParameter(2,oracle.jdbc.OracleTypes.V ARCHAR); 26.

27. //5.执行

28. cs.execute();

29. //取出返回值,要注意?的顺序 30. String name=cs.getString(2);

31. System.out.println(\的名字\32. } catch(Exception e){ 33. e.printStackTrace(); 34. } finally{

35. //6.关闭各个打开的资源 36. cs.close(); 37. ct.close(); 38. } 39. } 40.}

运行,成功得出结果。

案例扩张:编写一个过程,可以输入雇员的编号,返回该雇员的姓名、工资和岗 位。

Sql 代码

1. --有输入和输出的存储过程

2. create or replace procedure sp_pro8

3. (spno in number, spName out varchar2,spSal out number,spJob out varchar2) is 4. begin

5. select ename,sal,job into spName,spSal,spJob from emp where empno=spno; 6. end; 7. /

Java 代码

1. import java.sql.*; 2. public class Test2{

3. public static void main(String[] args){ 4.

5. try{

6. //1.加载驱动

7. Class.forName(\8. //2.得到连接

9. Connection ct = DriverManager.getConnection(\racle:thin@127.0.0.1:1521:MYORA1\10.

11. //3.创建CallableStatement

12. /*CallableStatement cs = ct.prepareCall(\ro7(?,?,?)}\13. //4.给?赋值

14. cs.setInt(1,10);

15. cs.setString(2,\笑傲江湖\16. cs.setString(3,\人民出版社\17.

18. //看看如何调用有返回值的过程 19. //创建CallableStatement

20. /*CallableStatement cs = ct.prepareCall(\ro8(?,?,?,?)}\21.

22. //给第一个?赋值 23. cs.setInt(1,7788); 24. //给第二个?赋值

25. cs.registerOutParameter(2,oracle.jdbc.OracleTypes.V ARCHAR);

26. //给第三个?赋值

27. cs.registerOutParameter(3,oracle.jdbc.OracleTypes.D OUBLE);

28. //给第四个?赋值

29. cs.registerOutParameter(4,oracle.jdbc.OracleTypes.V ARCHAR); 30.

31. //5.执行

32. cs.execute();

33. //取出返回值,要注意?的顺序 34. String name=cs.getString(2); 35. String job=cs.getString(4);

36. System.out.println(\的名字\工作: \

37. } catch(Exception e){ 38. e.printStackTrace(); 39. } finally{

40. //6.关闭各个打开的资源 41. cs.close(); 42. ct.close();

43. } 44. } 45.}

运行,成功找出记录

有返回值的存储过程(列表[结果集])??

案例:编写一个过程,输入部门号,返回该部门所有雇员信息。 对该题分析如下:

由于oracle 存储过程没有返回值,它的所有返回值都是通过out 参数来替代 的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用 pagkage 了。所以要分两部分: 返回结果集的过程

1.建立一个包,在该包中,我定义类型test_cursor,是个游标。 如下: Sql 代码

1. create or replace package testpackage as 2. TYPE test_cursor is ref cursor; 3. end testpackage; 2.建立存储过程。如下: Sql 代码

1. create or replace procedure sp_pro9(spNo in number,p_cursor out testpackage.test_cursor) is 2. begin

3. open p_cursor for

4. select * from emp where deptno = spNo; 5. end sp_pro9;

3.如何在java 程序中调用该过程 Java 代码

1. import java.sql.*; 2. public class Test2{

3. public static void main(String[] args){ 4.

5. try{

6. //1.加载驱动

7. Class.forName(\8. //2.得到连接

9. Connection ct = DriverManager.getConnection(\racle:thin@127.0.0.1:1521:MYORA1\10.

11. //看看如何调用有返回值的过程 12. //3.创建CallableStatement

13. /*CallableStatement cs = ct.prepareCall(\ro9(?,?)}\14.

15. //4.给第?赋值 16. cs.setInt(1,10);


存储过程(分页显示).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:牛津版7A Unit 3 知识点讲解

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: