- 浏览: 60352 次
- 性别:
- 来自: 成都
最新评论
-
云_不忘初心:
如果是可视化界面插入空值 该怎么办
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 1208每次启动oracle时都需要启动监听和实例,但是通过点击控 ... -
jsp调用oracle存储过程分页
2011-10-31 12:39 1957首先看下在oracle中一般 ... -
oracle例外处理
2011-10-30 17:10 686例外分类 oracle将例外分为预定义例外,非预 ... -
oracle pl/sql
2011-10-29 15:21 854pl/sql是什么? pl/s ... -
oracle索引
2011-10-29 01:58 947索引是用于加速数据存取的数据对象,合理的使用索 ... -
oracle数据库管理-数据字典
2011-10-28 01:46 875数据字典是oracle ... -
oracle数据库管理-数据库用户及备份和导入
2011-10-27 18:40 5121每个oracle数据库应该至少有一名数据库管理员(db ... -
oracle事物
2011-10-26 14:43 787事物: 事物用于保证数据的一致性,他 ... -
oracle的一些小窍门语法
2011-10-26 12:15 6141.将旧表中的数据导入到一个新表中 create table ... -
oracle的分页与合并查询
2011-10-26 01:40 9681.orcale的分页 一共有三 ... -
oracle表的复杂查询
2011-10-25 11:27 731命名列的别名可以带as,也可以不带as,命名表的别名不能 带a ... -
oracle插入空值
2011-10-25 10:57 5709首先申明一点,空值和0是截然不同的两个概念 插入值时可以选 ... -
oracle表的简单查询
2011-10-25 01:07 1023desc emp显示emp表的结构 ... -
oracle表的创建与删除
2011-10-25 00:12 29901.表名和列名的命名规则 <1.长度不能超过30 ... -
oracle权限与角色
2011-10-24 22:39 667... -
sqlserver与orcale在数据库与用户的组织结构上的区别
2011-10-24 22:37 758... -
oracle文件操作命令spool以及显示和环境设置
2011-10-24 22:31 1807------spool文件操作命令------------ ... -
profile文件
2011-10-23 21:32 813profile是口令限制,资源限制的命令集合,当建立 ... -
oracle数据库的连接,用户的管理与权限的简单命令
2011-10-23 18:46 5821orcale命令结束符为分号 ----------- ... -
oracle的启动
2011-10-23 17:25 614第一步启动服务: 我的电脑-》管理-》服务-》启动两个服务 ...
相关推荐
(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的编程基本要素,从而完成复杂的管理任务.
Oracle PL/SQL 高级程序设计,实用于进阶学习,已解密,解压即可用
这本书是关于pl/sql的基础和较进阶的好书哈,讲解非常详细到位,并辅助一些易懂的例子哈,赶快来下啊!
这是oracle学习的进阶部分,笔记很详细,相信对大家会有帮助的!
全面、深入浅出地介绍了Oracle数据库管理、监控、SQL及PL/SQL等开发的要点,配13.6小时同步教学视频,赠送7.8小时PL/SQL进阶教学视频!推荐本书姊妹篇《Oracle PL/SQL从入门到精通》与《Oracle数据库管理从入门到...
韩顺平老师 oracle 教程笔记 1.Oracle 认证,与其它数据库比较,安装 2.Oracle 的基本使用--基本命令 ...19.pl/sql 的进阶--控制结构(分支,循环,控制) 20.PL/SQL 分页 21.例外处理 22.oracle 的视图
该文档包含了数据库优化的各种方案,对于设计数据库,优化数据库有着特别的讲解,属于进阶型的文档,老手就不需要了
sql21天自学通中文文字版,难得的sql入门进阶教程 第一天 SQL 简介 第二天 查询— —SELECT 语句的使用 第三天 表达式 条件语句与运算 第四天 函数 对获得数据的进一步处理 第五天 SQL 中的子句 第六天 表的联接 第...
oracle进阶之plsql编程内容提要:通过对PL/SQL基础语法和存储函数、存储过程、包、触发器等数据库对象的概念及基本语法的学习与练习,达到学以致用的目的,并能在应用程序中调用存储函数及过程。
plsql--编程进阶 比较全面的文档
plsql developer guide 教程 ,中文版,详细讲解如何操作plsql developer
Oracle学习教程,详细文档,进阶oracle技能,十章节,重点在查询、函数、事物和锁、PL/SQL、存储过程和函数、游标及触发器
Oracle9i的开发学习资料,PDF中文版,非扫描版,13章全...第九章 编程进阶 PL/SQL 第十章 系统开发 VB+Oracle9i 第十一章 存储管理 深入Oracle9i核心 第十二章 数据安全 备份与恢复实战 第十三章 性能优化 通向OCP之路
通过学习PL/SQL基础语法和函数、存储过程、包、触发器等数据库对象的概念、基本语法及应用,达到学以致用的目的,并能在应用程序中调用存储函数及过程
第 9 章 编程进阶——PL/SQL ****** 第 10 章 系统开发——VB+Oracle 9i 第 11 章 存储管理——深入 Oracle 9i 核心 第 12 章 数据安全——备份与恢复实战 第 13 章 性能优化——通向 OCP 之路
SQL:精通Oracle Database 19c SQL & PL/SQL编程(第3版) 体系结构:Oracle编程艺术 深入理解数据库体系结构 管理类:Oracle Database 数据库管理艺术 优化和故障处理:Oracle Database 19C性能调整与优化(第5版) ...
对应同名书的下册,高清,可直接打印!书内含有Oracle的一些进阶知识点。
对应同名书的上册,高清,可直接打印!书内含有Oracle的一些进阶知识点。
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-...