● 使用pl/sql 编写分页过程。
通过编写分页过程,目的是让大家把前面学过的各个技术综合运行。
因为分页过程比较复杂,所以采用循序渐进的方式讲解。
1、 如何在j**a程序中调用没有返回值的过程;
2、 在j**a中如何调用返回非列表的值:
快速入门案例:编写一个过程,可以输入雇员的编号,返回该雇员的姓名。
编写过程:create or replace procedure pro1(v_in_empno in number,v_out_ename out varchar2) is
beginselect ename into v_out_ename from emp where empno=v_in_empno;
end;在j**a中去调用该过程,并接收返回的用户名:
说明:1、 对于过程的输入值,使用setxxx,对于输出值,使用 registeroutparameter,问号的数序要对应,同时考虑类型。
2、 取出过程的返回值的方法是 callablestatement 提供的getxxx(输出参数的位置,以及数据类型)。
3、 在j**a中调用返回列表值(集合或表)
案例: 编写一个过程,输入部门号,返回该部门所有雇员信息。
步骤:(1)、创建一个包,该包中定义一个游标类型;
create or replace package pack1 is
type my_cursor is ref cursor;
end;(2)、编写过程。
create or replace procedure pro1(v_in_deptno in number,v_out_result out is
begin
open v_out_result for select * from emp where deptno=v_in_deptno;
-为了让j**a程序可以使用游标,不能在这里关闭游标。
end;、编写j**a程序。
package
import
public class testprocedure2 ")
给问号赋值。
给第二个问号注册。
执行。获取结果,这里是关键。
rs=(resultset)
while(
ename")+sal"))
catch (exception e)
4 、完成一个分页存储过程:
需求:请大家编写一个存储过程,要求可以输入表名,每页显示记录数,当前页,返回返回的结果集。
-建包。使用游标类型。
create or replace package pack1 is
type my_cursor is ref cursor;
end;-编写过程。
create or replace procedure fenyepro
v_in_table in varchar2,v_in_pagesize in number,v_in_pagenow in number,v_out_result out is
-定义变量。
v_sql varchar2(2000);
v_start number;
v_end number;
begin-执行**。
v_start:=v_in_pagesize*(v_in_pagenow-1)+1;
v_end:=v_in_pagesize*v_in_pagenow;
v_sql:='select t2.* from (select t1.*,rownum rn from (select * from '|v_in_table
|')t1 where rownum<='v_end||'t2 where rn>='v_start ;
-打开游标,让游标指向结果集。
open v_out_result for v_sql;
end;在j**a中调用:
package
import
public class testprocedure2
对分页过程进行扩展,使之更加完善。
请大家编写一个存储过程,要求可以输入表名,每页显示记录数,当前页,返回返回的结果集,返回共有多少页,共有多少条?
新的分页过程:
create or replace procedure fenyepro2
v_in_table in varchar2,v_in_pagesize in number,v_in_pagenow in number,v_out_result out out number,v_out_pagecount out number) is
-定义变量。
v_sql varchar2(2000);
v_start number;
v_end number;
begin-执行**。
v_start:=v_in_pagesize*(v_in_pagenow-1)+1;
v_end:=v_in_pagesize*v_in_pagenow;
v_sql:='select t2.* from (select t1.*,rownum rn from (select * from '|v_in_table
|')t1 where rownum<='v_end||'t2 where rn>='v_start ;
-打开游标,让游标指向结果集。
open v_out_result for v_sql;
-查询共有多少条记录。
select count(*)into v_out_rows from emp;
if mod(v_out_rows,v_in_pagesize)=0 then
v_out_pagecount:=v_out_rows/v_in_pagesize;
elsev_out_pagecount:=v_out_rows/v_in_pagesize+1;
end if;
end;新的j**a程序调用是:
package
import
public class testprocedure2 {
//调用pro1过程,该过程有结果集返回。
public static void main(string args) {
定义需要的变量。
connection ct=null;
callablestatement cs=null;
resultset rs=null;
try {加载驱动。
得到链接。ct="jdbc:oracle:thin:@127.0.0.1:1521:orclydd","scott","tiger");
oracle笔记
1 查看表的结构 desc tabledescription 2 set timing on 打开操作表的时间记录。3 消除重复行 distinct 4 大小写不区分的是列名,而不是里面的数据。1 可以对某一列直接进行加减乘除。两列相加。2 如果有一列为null,所得结果也为空。使用nvl函数处理n...
Oracle笔记
第1页1.oracle 的使用 1.1.sqlplus 的命令 初始化表的位置 set nls lang american 设置编码才可以使用下面脚本 cd oracle home rdbms cd demo 我们目前使用的是oralce 9i 9201 版本 select from v versi...
oracle笔记
clear 清屏。col title for a20 设置title的字符最多有20个。oracle介绍。rdbsrdb 基本的存储结构是,二维表。表头。行。列。字段。sql的分类 dsl 关键字 select dml 操作 insert delete update ddl 定义 create dr...