ORACLE笔记

发布 2021-05-11 22:58:28 阅读 8753

● 使用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...