`
lms168
  • 浏览: 60352 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

pl/sql进阶

 
阅读更多

------------------------分页----------------------------
create table book(
bookId number(3),
bookName varchar2(50),
publishHourse VARCHAR2(50)
);
--编写过程额
--in;表示这是一个输入参数,不写默认就是in
--out;表示一个输出参数
create or replace procedure sp_book(spBookId in number,spBookName in varchar2,spPublishHour varchar2) is
begin
insert into book values(spBookId,spBookName,spPublishHour);
end;

alter table book
add constraint uq_bookId unique(bookId);
--有输入和输出的存储过程
create or replace procedure sp_book1(spBookId in number,spBookName out varchar2) is
begin
select bookName  into spBookName from book where bookId=spBookId;
end;

--返回两个值的存储过程

 

 

 


create or replace procedure sp_book2(spBookId in number,spBookName out varchar2,spBookPublisher out varchar2) is
begin
select bookName,PUBLISHHOUR into spBookName,spBookPublisher from book where bookId=spBookId;
end;

----返回值的存储过程(列表[结果集])--
--编写一个过程,输入部门号,返回该部门所有雇员信息
--由于oracle存储过程没有返回值,他的所有返回值都是通过out
--参数来替代的,列表也不例外,但由于是集合,所以不能用一般的参数
--必须要用packageg了,所以要分两部分
--<1建一个包
create or replace package testpackage as
type test_cursor is ref cursor;
end testpackage;
--<2.创建过程
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;

 

 

 


-----if语句;if--then-----
create or replace procedure sp_pro6(spName varchar2) is
v_sal emp.sal%type;
begin
   select sal into v_sal from emp where ename=spName;
if v_sal<2000
then update emp set sal=sal*1.1 where ename=spName;
end if;    --不能掉了这里
end;


-------二重if语句-if--then--else---
create or replace procedure sp_pro6(spName varchar2) is
v_comm emp.comm%type;
begin
   select comm into v_comm from emp where ename=spName;
if(v_comm<>0)then
 update emp set comm=comm+100 where ename=spName;
else
update emp set comm=comm+200 where ename=spName;
end if;
end;

----------多重条件分支-if--then--elsif---else---
create or replace procedure sp_pro7(spEmpno number) is
v_job emp.job%type;
begin
select job into v_job from emp where empno=spEmpno;
if v_job='PRESIDENT'then
update emp set sal=sal+1000 where empno=spEmpno;
elsif v_job='MANAGER'then
update emp set sal=sal+500 where empno=spEmpno;
else
update emp set sal=sal+200 where empno=spEmpno;
end if;
end;

-----------循环语句loop 至少执行一回--相当与while-----
create table Users(
uno  number(3),
uname varchar2(10)
);

create or replace procedure sp_user(spUname varchar2) is
v_num Users.Uno%type:=1;
begin
loop
insert into Users values(v_num,spUname);
v_num:=v_num+1;
exit when v_num=11;     --退出时的判断语句
end loop;
end;

-------------while循环--先判断再循环---相当于do-while-------------
create or replace procedure sp_user(spUname varchar2) is
v_num Users.Uno%type:=11;
begin
while v_num<=20 loop
--执行
  insert into Users values(v_num,spUname);
   v_num:=v_num+1;
end loop;
end;


---------------for 循环-------------
create or replace procedure sp_user(spUname varchar2) is
begin
for i in  21..30 loop         --如果想从30到20反过来插入则在in后面加关键字 reverse
--执行
  insert into Users values(i,spUname);
end loop;
end;
---------------goto语句-------一般不常用-----------


---------------null语句---null语句不会执行任何操作,并且会直接将控制传递到下一条语句-,使用null语句主要是为了提高代码的可读性-----------------
create or replace procedure sp_pro6(spName varchar2) is
v_sal emp.sal%type;
begin
   select sal into v_sal from emp where ename=spName;
if v_sal<2000
then update emp set sal=sal*1.1 where ename=spName;
else
null;
end if;    --不能掉了这里
end;

 

 

------------------------分页----------------------------
create table book(
bookId number(3),
bookName varchar2(50),
publishHourse VARCHAR2(50)
);
--编写过程额
--in;表示这是一个输入参数,不写默认就是in
--out;表示一个输出参数
create or replace procedure sp_book(spBookId in number,spBookName in varchar2,spPublishHour varchar2) is
begin
insert into book values(spBookId,spBookName,spPublishHour);
end;

alter table book
add constraint uq_bookId unique(bookId);
--有输入和输出的存储过程
create or replace procedure sp_book1(spBookId in number,spBookName out varchar2) is
begin
select bookName  into spBookName from book where bookId=spBookId;
end;

--返回两个值的存储过程
create or replace procedure sp_book2(spBookId in number,spBookName out varchar2,spBookPublisher out varchar2) is
begin
select bookName,PUBLISHHOUR into spBookName,spBookPublisher from book where bookId=spBookId;
end;

----返回值的存储过程(列表[结果集])--
--编写一个过程,输入部门号,返回该部门所有雇员信息
--由于oracle存储过程没有返回值,他的所有返回值都是通过out
--参数来替代的,列表也不例外,但由于是集合,所以不能用一般的参数
--必须要用packageg了,所以要分两部分
--<1建一个包
create or replace package testpackage as
type test_cursor is ref cursor;
end testpackage;
--<2.创建过程
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;

 

--平常的分页代码
select * from emp;

select e.*,rownum rn from (select * from emp)e;

select e.*,rownum rn from (select * from emp)e where rownum<10;

select * from (select e.*,rownum rn from (select * from emp)e where rownum<10) where rn>6;

create or replace package fengyepackage as
type fengye_cursor is ref cursor;
end fengyepackage;

create or replace  procedure sp_fengye(pageNow in number,pageSise in number,tableName in varchar2,sortOrder in varchar2,pageCount out number,fengye_cursor out fengyepackage.fengye_cursor) is
v_rowCount number(2);  --总记录数目
v_pageCount number(2); --总页数
v_fromline number(2);
v_toline number(2);
v_sql  varchar2(1000);
begin
v_sql:='select count(*) from '||tableName;  --组织一个sql
execute immediate v_sql into v_rowCount;   --执行sql,并且把返回值赋给v_rowCount
if  mod(v_rowCount,pageSise)=0 then      --v_rowCount%pageSise=0的取余数的方式是错误的
v_pageCount:=v_rowCount/pageSise;
else
v_pageCount:=ceil(v_rowCount/pageSise);  --ceil相当于加了1
end if;
v_toline:=pageNow*pageSise;
v_fromline:=(pageNow-1)*pageSise;
pageCount:=v_pageCount;
v_sql:='select * from (select e.*,rownum rn from (select * from '||tableName||' '||sortOrder||')e where rownum<='||v_toline||') where rn>'||v_fromline;--两个连接符号之间要用空格隔开,否则java程序无法识别
open fengye_cursor for v_sql;
--close fengye_cursor;  --关闭游标,不能关闭否则java程序调用不到数据
--把游标的结果集传给JAVA的resultset之是不需要我们来手动的关闭游标的,因为JAVA把这个结果集接收过来的之后,如果JAVA对这个结果集操作完毕的话,JAVA会把这个结果集关闭掉的,不需要我们手动的去作任何操作!

end;


------游标测试
set serveroutput on;
declare
--定义游标类型sp_emp_cursor
type sp_emp_cursor is ref cursor;
--定义一个游标变量test_cursor
test_cursor sp_emp_cursor;
--定义变量
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
--把teset_cursor和一个select结合
open test_cursor for select ename ,sal from emp where deptno=&no;
--循环取出
loop
    fetch test_cursor into v_ename,v_sal;
    exit when test_cursor%notfound;
    dbms_output.put_line('雇员姓名是:'||v_ename||'薪资是:'||v_sal);
end loop;   
close test_cursor;
end;

 

 

 

 

分享到:
评论

相关推荐

    oracle使用管理笔记(一些经验的总结)

    (7)PL/SQL进阶分页过程 62 (8)PL/SQL进阶例外 62 (9)视图 62 22.数据库管理+表的逻辑备份与恢复 63 23.数据字典和动态性能视图 67 24.oracle的卸载 69 25.尚学堂SQL简单讲解 70 Oracle常用函数 73 (1)trunc(for date...

    编程进阶性--PL/SQL

    本书通过实例的方式教会读者掌握PL/SQL的编程基本要素,从而完成复杂的管理任务.

    Oracle PL/SQL 高级程序设计

    Oracle PL/SQL 高级程序设计,实用于进阶学习,已解密,解压即可用

    pl/sql用户指南与参考

    这本书是关于pl/sql的基础和较进阶的好书哈,讲解非常详细到位,并辅助一些易懂的例子哈,赶快来下啊!

    pl/sql学习笔记

    这是oracle学习的进阶部分,笔记很详细,相信对大家会有帮助的!

    Oracle数据库管理从入门到精通

    全面、深入浅出地介绍了Oracle数据库管理、监控、SQL及PL/SQL等开发的要点,配13.6小时同步教学视频,赠送7.8小时PL/SQL进阶教学视频!推荐本书姊妹篇《Oracle PL/SQL从入门到精通》与《Oracle数据库管理从入门到...

    oracle实用教程-韩顺平

    韩顺平老师 oracle 教程笔记 1.Oracle 认证,与其它数据库比较,安装 2.Oracle 的基本使用--基本命令 ...19.pl/sql 的进阶--控制结构(分支,循环,控制) 20.PL/SQL 分页 21.例外处理 22.oracle 的视图

    数据库优化方案

    该文档包含了数据库优化的各种方案,对于设计数据库,优化数据库有着特别的讲解,属于进阶型的文档,老手就不需要了

    sql21天自学通

    sql21天自学通中文文字版,难得的sql入门进阶教程 第一天 SQL 简介 第二天 查询— —SELECT 语句的使用 第三天 表达式 条件语句与运算 第四天 函数 对获得数据的进一步处理 第五天 SQL 中的子句 第六天 表的联接 第...

    oracle进阶之plsql编程

    oracle进阶之plsql编程内容提要:通过对PL/SQL基础语法和存储函数、存储过程、包、触发器等数据库对象的概念及基本语法的学习与练习,达到学以致用的目的,并能在应用程序中调用存储函数及过程。

    plsql--编程进阶

    plsql--编程进阶 比较全面的文档

    plsql developer guide 教程

    plsql developer guide 教程 ,中文版,详细讲解如何操作plsql developer

    Oracle学习教程&进阶

    Oracle学习教程,详细文档,进阶oracle技能,十章节,重点在查询、函数、事物和锁、PL/SQL、存储过程和函数、游标及触发器

    Oracle9i开发文档

    Oracle9i的开发学习资料,PDF中文版,非扫描版,13章全...第九章 编程进阶 PL/SQL 第十章 系统开发 VB+Oracle9i 第十一章 存储管理 深入Oracle9i核心 第十二章 数据安全 备份与恢复实战 第十三章 性能优化 通向OCP之路

    oracle进阶之PLSQL编程.rar_oracle_oracle 编程_应用于java程序

    通过学习PL/SQL基础语法和函数、存储过程、包、触发器等数据库对象的概念、基本语法及应用,达到学以致用的目的,并能在应用程序中调用存储函数及过程

    Oracle中文教程

    第 9 章 编程进阶——PL/SQL ****** 第 10 章 系统开发——VB+Oracle 9i 第 11 章 存储管理——深入 Oracle 9i 核心 第 12 章 数据安全——备份与恢复实战 第 13 章 性能优化——通向 OCP 之路

    Oralce19C 手册文档 章节资料

    SQL:精通Oracle Database 19c SQL & PL/SQL编程(第3版) 体系结构:Oracle编程艺术 深入理解数据库体系结构 管理类:Oracle Database 数据库管理艺术 优化和故障处理:Oracle Database 19C性能调整与优化(第5版) ...

    Oracle.PL.SQL程序设计 第五版 下册

    对应同名书的下册,高清,可直接打印!书内含有Oracle的一些进阶知识点。

    Oracle.PL.SQL程序设计 第五版 上册

    对应同名书的上册,高清,可直接打印!书内含有Oracle的一些进阶知识点。

    Fortify-SCA-扫描工具指导手册.pdf

    PL/SQL IDE Intermediate FPR TSOL Model Cold Command Line Interface Fusion 运己 Fortify I m Manager Secure Coding Rules Fortify Customized Rules Rules FORTIFY Fortify SCA扫描的五种方式 插件方式: Plug-...

Global site tag (gtag.js) - Google Analytics