- 浏览: 61546 次
- 性别:
- 来自: 成都
最新评论
-
云_不忘初心:
如果是可视化界面插入空值 该怎么办
oracle插入空值 -
aa00aa00:
例子通俗易懂,我已经成功运行起来了
jsp调用oracle存储过程分页
------------------------分页----------------------------
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的dos启动命令
2012-05-23 10:48 1243每次启动oracle时都需要启动监听和实例,但是通过点击控 ... -
jsp调用oracle存储过程分页
2011-10-31 12:39 1997首先看下在oracle中一般 ... -
oracle例外处理
2011-10-30 17:10 716例外分类 oracle将例外分为预定义例外,非预 ... -
oracle pl/sql
2011-10-29 15:21 888pl/sql是什么? pl/s ... -
oracle索引
2011-10-29 01:58 987索引是用于加速数据存取的数据对象,合理的使用索 ... -
oracle数据库管理-数据字典
2011-10-28 01:46 901数据字典是oracle ... -
oracle数据库管理-数据库用户及备份和导入
2011-10-27 18:40 5163每个oracle数据库应该至少有一名数据库管理员(db ... -
oracle事物
2011-10-26 14:43 813事物: 事物用于保证数据的一致性,他 ... -
oracle的一些小窍门语法
2011-10-26 12:15 6431.将旧表中的数据导入到一个新表中 create table ... -
oracle的分页与合并查询
2011-10-26 01:40 9971.orcale的分页 一共有三 ... -
oracle表的复杂查询
2011-10-25 11:27 767命名列的别名可以带as,也可以不带as,命名表的别名不能 带a ... -
oracle插入空值
2011-10-25 10:57 5772首先申明一点,空值和0是截然不同的两个概念 插入值时可以选 ... -
oracle表的简单查询
2011-10-25 01:07 1046desc emp显示emp表的结构 ... -
oracle表的创建与删除
2011-10-25 00:12 30151.表名和列名的命名规则 <1.长度不能超过30 ... -
oracle权限与角色
2011-10-24 22:39 707... -
sqlserver与orcale在数据库与用户的组织结构上的区别
2011-10-24 22:37 785... -
oracle文件操作命令spool以及显示和环境设置
2011-10-24 22:31 1846------spool文件操作命令------------ ... -
profile文件
2011-10-23 21:32 852profile是口令限制,资源限制的命令集合,当建立 ... -
oracle数据库的连接,用户的管理与权限的简单命令
2011-10-23 18:46 5859orcale命令结束符为分号 ----------- ... -
oracle的启动
2011-10-23 17:25 639第一步启动服务: 我的电脑-》管理-》服务-》启动两个服务 ...
相关推荐
在这个“PL/SQL学习资料”压缩包中,包含了十一个PDF文件,覆盖了从基础到进阶的广泛主题。下面我们将详细探讨这些知识点。 1. **PL/SQL基础知识**: - PL/SQL结构:了解块的概念,包括声明部分、执行部分和异常...
### Oracle PL/SQL Programming知识点概览 #### 一、书籍基本信息 - **书名**:Oracle PL/SQL Programming(第五版) - **作者**:Steven Feuerstein 和 Bill Pribyl - **出版日期**:2009年10月1日 - **出版社**:...
Oracle PL/SQL 学习指南 Oracle PL/SQL 是一种功能强大且灵活的编程语言,广泛应用于 Oracle 关系数据库管理系统中。本学习指南旨在帮助读者快速掌握 PL/SQL 的基础知识和高级技术。 PL/SQL 区块(BLOCK)的结构 ...
这个“PL/SQL参考资料”显然是一个针对初学者和进阶者的学习资源,旨在帮助读者逐步理解和掌握这一核心技术。 首先,我们要理解PL/SQL的基本结构。它由声明部分(Declarations)、执行部分(Executable section)和...
### SQL与PL/SQL知识点详解 #### 一、资料库基本概念 - **数据库管理系统(DBMS)**:Oracle数据库管理系统是一种关系型数据库管理系统(RDBMS),它使用SQL作为查询语言,支持多种数据类型、安全性特性以及事务...
PL/SQL,全称Procedural Language/...总的来说,PL/SQL教程PPT涵盖了从基础到进阶的多个方面,是学习和理解PL/SQL编程的良好资源。通过深入学习和实践,开发者可以有效地利用PL/SQL来管理和操作Oracle数据库。
### 编程进阶性—PL/SQL #### 一、PL/SQL概述与基础知识 **1.1 什么是PL/SQL?** PL/SQL(Procedural Language for SQL)是一种专门为Oracle数据库设计的过程化语言,它结合了SQL的数据操纵能力和传统编程语言的...
这些源码涵盖了PL/SQL的各个核心概念,是初学者和进阶者宝贵的参考资料。在实践中,你可以尝试修改源码,观察其运行效果,从而增强对PL/SQL的掌握。同时,这些例子也可以作为日后项目开发中的参考,解决实际问题。
本教程将深入探讨PL/SQL的各个方面,旨在帮助初学者和进阶者掌握这一关键技能。 在PL/SQL中,你可以编写存储过程、函数、触发器、游标和异常处理等高级数据库操作,这些都极大地增强了数据库应用的灵活性和效率。本...
PL/SQL,全称Procedural ...这本书通过详细的讲解和实例,无疑能帮助读者从基础到进阶,全面掌握PL/SQL的使用。对于数据库开发者、DBA或者希望提升Oracle数据库应用开发能力的人来说,是一本不可多得的参考资料。
而对进阶用户,了解如何利用PL/SQL Developer进行高效开发和数据库管理将非常有用。在使用过程中,注意定期更新软件以获取最新的补丁和功能,同时遵守软件许可协议,合法使用注册码,尊重知识产权。 总之,PL/SQL...
总的来说,《Oracle PL/SQL 实例精解》是一本实用的指南,旨在帮助读者从基础到进阶全面掌握Oracle数据库的PL/SQL编程技术,提升在数据库管理和开发领域的专业能力。通过阅读和实践书中的例子,读者不仅可以学习到...
《Oracle 8i PL/SQL 秘籍》是一本针对初学者极其有价值的指南,它为读者提供了深入理解Oracle数据库管理和PL/SQL编程的基础知识。Oracle是全球广泛使用的数据库管理系统之一,尤其是在大型企业和关键业务系统中。PL/...
Oracle Database 11g是Oracle Corporation发布的一个版本的数据库系统,它包含了对数据库管理系统的改进和新特性,其中PL/SQL是Oracle数据库中用于存储过程和函数的一种过程化语言。PL/SQL的培训文档通常涵盖了...
这篇博客“Oracle PL/SQL的练习题”可能包含一系列针对初学者和进阶者的编程挑战,旨在提升对PL/SQL语言的理解和应用能力。虽然没有具体的描述,但我们可以推测这些练习可能涵盖以下几个方面: 1. **变量声明与赋值...
PL/SQL Developer是一款专为Oracle数据库设计的集成开发环境(IDE),它提供了全面的功能,使得开发者可以高效地编写、测试和调试PL/SQL代码。PL/SQL是Oracle数据库中的过程化语言,它扩展了SQL,增加了流程控制、...
这些知识点涵盖了PL/SQL的基础和进阶概念,是理解并使用PL/SQL进行数据库编程的关键。通过深入学习和实践,你可以创建高效、可靠的数据库应用程序。如果你对“PLSQL”标签下的笔记内容感兴趣,可以深入研究这两个...
《Oracle PLSQL 实例精解(第4版)》是一本深入探讨Oracle数据库中的PL/SQL编程语言的专业书籍。PL/SQL是Oracle数据库系统中用于处理数据的强大工具,它结合了SQL的查询能力与过程性编程语言的功能。本书旨在帮助读者...
Oracle SQL和PL/SQL是数据库管理和开发中的核心技能,尤其对于那些希望在IT行业中从事数据库设计、开发或管理的人来说,掌握这些技术至关重要。本练习资料集合了丰富的学习资源,为初学者提供了扎实的基础,同时也...