`
步青龙
  • 浏览: 295585 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
72ba33fb-eefe-3de1-bd65-82a6e579265d
Java面试
浏览量:0
社区版块
存档分类
最新评论

PL/SQL(二)

 
阅读更多

PLSQL  条件控制语句

if-then ,if -then -elseif-else,if-then-else

输入一个员工,如果其工资小于2000 就让其工资加100

create or replace procedure my_pro(name varchar2) is

v_sal emp.sal%type;

begin 

select sal into v_sal from emp where ename  = name;

if (v_sal<2000) 

then

update emp set sal = sal + 100 where ename = name;

end if;

end;

 

exec mypro('SCOTT');

 

如果补助不为0就加100,如果为0就设为200补助

if v_comm <>0 then   --  +100 操作

else  -- 设为200

end if;

 

多种判断

if b1 then   xxx

elsif b2 then  xxx

else  xxx

end if;

 

循环结构

for while ,do..while

loop  

end loop;

 

while b loop 

  xxx

end loop

end;

for 很少用,不太灵活,每次只能增1

for i in reverse 1..10 loop

xxxx;

end loop;

end;

 

goto  不建议使用

如果有多种循环,如果某种原因需要从最里面的循环跳到外面其中的某种循环的话需要用goto.goto 可读性很差

goto mylabel  

用法 <<mylabel>>

<<mylabel>> 放到哪里就跳到哪里

 

null 

if b then else null; end if;

 

分页过程

 

过程的参数  过程名(参数名1 in 类型,....)  注意in为可选参数

 

有返回值的过程 (有输入有输出)

create or replace procedure mypro (noid in varchar2,name out varchar2) is

begin 

select ename into name from emp where empno = noid;

end;

 

java 如何得到输出值呢?

CallableStatement cs = conn.prepareCall("{call mypro(?,?)}");

cs.setInt(1,7873); //员工阿訇为7873

cs.registerOutParameter(2,oracle.jdbc.OracleTypes.VARCHAR);

// 此处必须一一对应,都必须注册

cs.execute();

System.out.print("员工名字为"+ cs.getString(2));

 

多个返回值就写多个out 

但是参数很多,想得到结果集如何办?

 

用package

创建一个包,定义一个mytest_cursor游标类型

create or replace package testpackage as 

type mytest_cursor is ref cursor

end testpackage;

 

2 创建过程

create or replace procedure my_pro(deptno in number,out_cursor out  testpackage.mytest_cursor) is 

begin 

open out_cursor for 

select * from emp where deptno = deptno;

end;

 

3 java调用返回结果集

CallableStatement cs = conn.prepareCall("{call mypro(?,?)}");

cs.setInt(1,10); //10 号部门

cs.registerOutParameter(2,oracle.jdbc.OracleTypes.CURSOR);

cs.execute();

// 得到结果集

ResultSet rs = (ResultSet)cs.getObject(2);

while(rs.next){

System.out.println(rs.get(1) + "...........");

//

}

 

分页:传入表名,每页显示的记录数,当前页。

然后返回总条数,总页数,当前页的结果集

分页的语句

select * from (select t1.*,rowrnum from(select * from emp t1) where rownum >= 10) where rn >= 6;

 

 

create or replace procedure page

(tablename in varchar2,pagesize in number,currentpage in number

allsize out number,allpage out number,

out_cursor out  testpackage.mytest_cursor

) is

-- 定义一个sql

v_sql varchar2(300);

v_startnum number:=(current-1)*pagesize+1;

v_endnum number:=v_startnum + pagesize;

v_sql:='select * from (select t1.*,rowrnum from(select * from '||tablename||' t1) where rownum >= '||endnum||') where rn >= '||startnum||';';

beign 

open out_cursor for v_sql;

 -- 计算总行数总页数

v_sql:='select count(*) from '||tablename;

 -- 执行并返回记录数

execute immediate into allsize;

 -- 计算总页数

if mod(allsize,pagesize)=0

  then 

all page  := allsize / pagesize- 1;

end if;

close out_cursor ;

end;

 

用java测试

 

CallableStatement cs = conn.prepareCall("{call page(?,?,?,?,?,?)}");

cs.setString(1,"emp");

cs.setInt(2,5);

cs.setInt(3,1);

cs.registerOutParameter(4,oracle.jdbc.OracleTypes.INTEGER);

cs.registerOutParameter(5,oracle.jdbc.OracleTypes.INTEGER);

cs.registerOutParameter(6,oracle.jdbc.OracleTypes.CURSOR);

cs.execute();

// 得到其他信息

// 得到结果集

ResultSet rs = (ResultSet)cs.getObject(6);

while(rs.next){

System.out.println(rs.get(1) + "...........");

//

}

 

如果想按照薪水倒叙呢只需要在过程拼接的sql 添加 order by sal 

疑问? 动态的为表分页,但是不同的表可能按照不同的字段排序,同一个表不同的地方也可能按照不同的字段排序。如何解决?

 

 

分享到:
评论

相关推荐

    pl/sql最新中文手册

    PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种过程化语言,专为数据库操作设计。这个"PL/SQL最新中文手册"显然是一份详细解释PL/SQL 7.0版本的指南,对于学习和精通Oracle数据库编程至关重要。以下是手册...

    oracle10g_pl/sql

    Oracle 10g PL/SQL 是Oracle数据库系统中用于创建和管理存储过程、函数、触发器等数据库对象的编程语言。本教程旨在为初学者提供一个全面的学习平台,同时也为经验丰富的开发者提供参考资料。PL/SQL是Oracle特有的...

    一个对数据库的操作工具PL/SQLpl/sqL工具

    PL/SQL是Oracle公司开发的一种过程化语言,全称为Procedural Language/Structured Query Language,它是SQL的一个扩展,专门用于处理Oracle数据库系统。这个“PL/SQL工具”显然是一个用于辅助管理和操作Oracle数据库...

    pl/sql例题代码pl/sql例题代码pl/sql例题代码

    在"plsql_day02"这个压缩包文件中,很可能包含了第二天学习PL/SQL时的一些示例代码。这些代码可能涉及到以下知识点: 1. **变量声明**:在PL/SQL中,我们首先需要声明变量来存储数据,比如`DECLARE`关键字用于定义...

    pl/sql developer11.0

    PL/SQL Developer是一款由Allround Automations公司开发的专业Oracle数据库开发工具,专为编写、调试、测试和管理PL/SQL代码而设计。标题中的“pl/sql developer11.0”指的是该软件的第11个主要版本。在本文中,我们...

    Oracle PL/SQL实战(待续)

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计特性,是Oracle数据库系统中用于创建存储过程、函数、触发器和包的主要工具。在这个"Oracle PL/SQL实战(待续)"的主题中,我们将深入...

    pl/sql64位

    PL/SQL是Oracle数据库系统中的一个关键组件,全称为Procedural Language/Structured Query Language,是一种结合了SQL和过程编程语言的工具,主要用于编写数据库应用程序。64位的PL/SQL开发者工具对于那些处理大数据...

    oracle 9i pl/sql程序设计笔记

    ### Oracle 9i PL/SQL程序设计笔记精要 #### PL/SQL基础知识概览 **标题与描述**:本文档围绕“Oracle 9i PL/SQL程序设计笔记”这一核心主题,深入探讨了PL/SQL语言的基础知识及其在Oracle 9i数据库环境中的应用。...

    PL/SQL VCS插件安装包+PL/SQL

    PL/SQL VCS插件是为开发者提供的一种增强工具,它与PL/SQL Developer整合,目的是为了更好地管理和控制Oracle数据库中的SQL脚本和存储过程的版本。这个安装包结合了Version Control System (VCS)的功能,如Visual ...

    pl/sql 免安装,绿色版pl/sql

    PL/SQL Developer是一款高效、便捷的Oracle数据库管理工具,尤其适合DBA和开发人员使用。免安装的绿色版PL/SQL Developer使得用户无需经历复杂的安装过程,只需解压即可使用,大大简化了软件部署,方便在不同的...

    Oracle PL/SQL程序设计(第5版)(上下册)

    #### 二、PL/SQL程序结构 - **块结构**:PL/SQL程序通常被组织成块,每个块由声明部分、执行部分和异常处理部分组成。 - **子程序**:包括存储过程和函数。这些子程序可以被其他PL/SQL代码调用,实现代码复用和模块...

    PL/SQL Developer 远程连接Oracle数据库

    PL/SQL Developer是一款专为Oracle数据库设计的集成开发环境,它极大地简化了PL/SQL语言的编写、调试和管理任务。远程连接Oracle数据库是PL/SQL Developer的一项关键功能,允许用户在本地计算机上操作和管理远程...

    PL/SQL 基本知识

    PL/SQL是Oracle数据库系统中的一个核心组件,全称为“Procedural Language/Structured Query Language”,它是SQL的扩展,增加了编程元素,使得开发者能够编写存储过程、函数、触发器等数据库应用程序。这篇博客主要...

    pl/sql快捷插件

    PL/SQL Developer是一款由Allround Automations公司开发的专门用于Oracle数据库管理的集成开发环境(IDE)。这款软件为Oracle数据库管理员、开发人员和测试人员提供了便捷的SQL和PL/SQL编写、调试和执行功能。而“pl...

    Oracle PL/SQL程序设计(第5版)(套装上下册)

    《Oracle PL/SQL程序设计(第5版)(套装上下册)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、高级PL/SQL主题这6个方面详细系统地讨论了PL/SQL以及如何...

    PL/SQL编程基础知识

    #### 二、PL/SQL块结构 **2.1 PL/SQL块** PL/SQL程序通常由以下三个部分组成: - **声明部分**:用于声明变量、游标、局部存储过程和函数等。 - **执行部分**:包含了过程化的控制语句和SQL语句,是程序的核心...

    PL/SQL下载

    PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种结合了SQL语言与过程编程的语言,专为数据库管理和应用程序开发设计。PL/SQL全称为“Procedural Language/Structured Query Language”,它提供了丰富的控制...

    PL/SQL User's Guide and Reference (官方CHM)

    PL/SQL, Oracle's procedural extension of SQL, is an advanced fourth-generation programming language (4GL). It offers modern features such as data encapsulation, overloading, collection types, ...

    PL/SQL Developer9.06

    PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL ...

    PL/SQL Developer trial version问题

    PL/SQL Developer是一款由Allround Automations公司开发的Oracle数据库集成开发环境,专门用于编写、调试和管理PL/SQL代码。在你所遇到的问题中,"trial version"指的是试用版,这意味着你正在使用的PL/SQL ...

Global site tag (gtag.js) - Google Analytics