- 浏览: 151650 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (210)
- java (44)
- javascript (5)
- 网摘 (21)
- 程序人生 (19)
- hibernate (21)
- spring (7)
- struts (1)
- jquery (2)
- mssql (3)
- mysql (3)
- oracle (7)
- 学习日记 (10)
- PowerDesigner (1)
- android (4)
- 调试 (1)
- tomcat (3)
- webapp (1)
- context (2)
- jsp (2)
- 学习 (18)
- 态度 (4)
- 坚持 (4)
- jsf (1)
- ui (1)
- css (1)
- seam (0)
- 转载 (5)
- JNDI (1)
- 创业 (1)
- 公司 (1)
- 方向 (1)
- ETL (1)
- Datastage (1)
- 数据整合 (1)
- 心情,感触 (1)
- 开发 (2)
- 测试 (1)
- 需求 (1)
- 湿身 (1)
- 网购,分类 (1)
- 驾校,转载 (1)
- 中秋,露营 (1)
- 域名 (1)
- 空间 (1)
- 网站程序 (1)
- SolrCloud (1)
- Solr (6)
- 全文库 (1)
- HBase (1)
- Hadoop (1)
- 网络应用 (1)
- 数据结构 (1)
- NoSQL (1)
- jQueryEasyUI (1)
- 面试 (1)
- 三十六计 (1)
- S2S3H4 (1)
- jar (1)
- war (1)
- web 项目 (1)
- Subversion (1)
- TortoiseSVN (1)
- MyEclipse (1)
- eclipse svn插件 (1)
- SQL2005 (1)
- ASP (1)
- 笔记 (2)
- 虚拟器、centOS、jdk、tomcat、nginx (1)
- memcached (1)
- nginx (1)
- telnet (1)
- nfs (1)
- zookeeper (2)
- window (1)
- linux (3)
- cronolog (1)
- web (1)
- mybatis (3)
- 设计模式 (1)
- 测试覆盖率 (1)
- EclEmma (1)
- tomcat7 (1)
- sore (1)
- 时间 (1)
- fackbook (0)
- facebook (1)
- IK (2)
- PKUSUMSU (1)
- openoffice (1)
- pdf (1)
- memcache (1)
- 动态词库 (1)
- 动态同义词 (1)
- centos7.3 (2)
- maven (4)
- 111 (0)
- nexus (2)
- 23种设计模式 (1)
- springboot (1)
- shiro (1)
- redis (1)
- rabbitMQ (1)
- native (1)
- dll (1)
- jasperReports (1)
- ireport (1)
最新评论
-
zhongfenglin:
学车的经历 -
Tiny_小小:
...
网购的选择 -
jrjr200411:
楼主写的好!
面对大公司和小公司的选择 -
feelboy:
说的很好。
每周四十小时,你有多少是在为自己干活?
基本结构
CREATE OR REPLACE PROCEDURE 名称
(
参数1 IN NUMBER,
参数2 OUT NUMBER,
参数3 IN OUT NUMBER
.....
) IS (AS)
变量1 VARCHAR2(50);
变量2 INTEGER :=0;
.....
BEGIN
dosomething...
END 名称;
一些用法
1.SELECT INTO STATEMENT (返回一条记录赋值给一个或多个变量)
将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)
例子:
BEGIN
SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx;
EXCEPTION
WHEN NO_DATA_FOUND THEN
dosomething...
END;
2.IF 判断
例子:
IF V_TEST=1 THEN
BEGIN
do something
END;
END IF;
3.WHILE 循环
例子:
WHILE V_TEST=1 LOOP
BEGIN
XXXX
END;
4.FOR 循环
例子:
FOR I IN 1..100 LOOP
do something.
END LOOP;
5.变量赋值
V_TEST :=0;
6.使用游标(返回多条记录的结果集)
例子1(使用fetch...into...)
BEGIN
OPEN cur FOR SELECT * FROM EMP;
LOOP
FETCH cur INTO cur_result ;
do something;
END LOOP;
CLOSE cur;
END;
例子2(使用for...in...)
....
IS
Cursor cur is select * from emp;
v_emp EMP%ROWTYPE;
BEGIN
FOR v_emp IN cur loop
do someting;
end loop;
END;
7.有无返回值,看看传入的参数是否有IN,OUT,无OUT无返回值,反之,亦然.
8.IS 后面定义的不能加入IN,OUT 关键字
9.游标属性,cur%found,cur%notFound,cur%rowcount=>下一行结果集存在,下一行结果集不存在,行数
10.类型属性,table.field%type,table%rowType
11.异常(内部异常和用户异常)
常见的异常:
no_data_found(select into 语句没有符合条件的记录返回)
too_many_rows(select into 语句符合条件的记录有多条返回)
dup_val_on_index(对于数据库表中的某一列,该列已经被限制为唯一索引,程序试图存储两个重复的值)
value_error(在转换字符类型,截取或长度受限时,会发生该异常,如一个字符分配给一个变量,而该变量声明的长度比该字符短,就会引发该异常)
storage_error(内存溢出)
zero_divide(除数为零)
case_not_found(对于选择case语句,没有与之相匹配的条件,同时,也没有else语句捕获其他的条件)
cursor_already_open( 程序试图打开一个已经打开的游标 )
timeout_on_resource( 系统在等待某一资源,时间超时 )
others (其他未命名的异常)
例子:
BEGIN
do something
EXCEPTION
when not_data_found then null;
when others then exit;
END;
12.抛出异常
通过PL/SQL运行时引擎
使用RAISE语句
调用RAISE_APPLICATION_ERROR存储过程
例子:(使用RAISE语句)
BEGIN
IF order_rec.qty>inventory_rec.qty THEN
RAISE inventory_too_low;
END IF ;
EXCEPTION
WHEN inventory_too_low THEN
order_rec.staus:='backordered';
END;
一些对应的例子
-- 存储过程测试1(赋值变量)
create or replace procedure mytest1(t in varchar2,
t2 out varchar2,
t3 out varchar2) is
begin
select ename, job into t2, t3 from emp p where p.empno = t;
dbms_output.put_line('ok');
exception
when others then
rollback;
end mytest1;
-- 存储过程测试2(判断条件)
create or replace procedure mytest2(x in number, y out number) is
begin
if (x > 0) then
begin
y := 10;
end;
end if; if x = 0 then
begin
y := 5
end;
end if;
end mytest2;
-- 存储过程测试3(while 循环条件)
create or replace procedure mytest3(i in number, j out number) is
begin
while i < 10 loop
begin
i := i + 1; j := i;
end;
end loop;
end mytest3;
-- 存储过程测试4(for 循环条件)
create or replace procedure mytest4() as
cur Cursor is
select ename from emp; myname varchar2(100);
begin
for myname in cur loop
begin
dbms_output.put_line(myname);
end;
end loop;
end mytest4;
-- 游标的使用(Cursor型游标,SYS_REFCURSOR型游标)
create or replace procedure mytest5() is
cur1 Cursor is
select ename from emp where empno = ''; --Cursor的使用方式1
cur2 Cursor;
begin
select xxxx into cur2 from tablename where xx = ''; --Cursor的使用方式2
end mytest5;
create or replace procedure mytest52(rsCursor out sys_refcursor) as
cur sys_refcursor; myname varchar(20);
begin
open cur for select ename from emp where ''; --SYS_REFCURSOR只能通过OPEN方法来打开和赋值
loop fetch cur into myname
--SYS_REFCURSOR只能通过fetch into来打开和遍历 exit when cursor%NOTFOUND; --SYS_REFCURSOR中可使用三个状态属性:
---%NOTFOUND(未找到记录信息) %FOUND(找到记录信息) ---%ROWCOUNT(然后当前游标所指向的行位置)
dbms_output.put_line(myname);
end loop; rsCursor := cur;
end mytest52;
发表评论
-
Oracle效率小技巧
2014-09-17 13:56 4881.--加快关联表查询速度,设置每次块读取数 S ... -
oracle 导入导出
2011-10-30 20:40 1065Oracle数据导入导出imp/ex ... -
oracle的dblink和synonym
2011-08-14 22:22 1773简单的介绍oracle的dblink和synonym的创建、删 ... -
几种数据库的sql分页
2011-07-31 20:05 856Oracle 分页分页查询格式(第1种):SELECT * F ... -
几种连接方式
2011-07-31 17:10 654-- 创建两张实体表来演示create table SYS_U ... -
PowerDesigner15正向工程,PowerDesigner15反向工程
2011-07-25 20:09 1163PowerDesigner15正向工程,PowerDesign ...
相关推荐
结合实例,介绍了oracle存储过程的用法,包括定义,变量类型,游标,流程分支语句的使用
相当的简明,清晰,如果你想对在oracle数据库中如何写存储过程,那这就是你想要的,还等什么,赶快下载吧
本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...
如果存储过程被锁住,可以使用这个存储过程解锁方法
Oracle存储过程、游标、函数的详解
本包用于记录存储过程里面的日志,将日志信息写入日志表(mylog)。可以记录日志时间、过程名称、过程里面记录日志的行数、参数值。如果在异常处理部分记录日志,还可以记录异常代码、异常...本人使用开发环境为oracle10g
4、开发指南:《Oracle存储过程入门指南&100+种真实业务场景存储过程实例.pdf》,可以帮助初学者系统学习。 5、资源包括“通用存储过程整理” 和 “真实业务存储过程整理” 两部分,通用适合各种系统,可以无缝隙...
Oracle存储过程和函数(最详细包含emp 表实例操作,边看边操作),目前最详细的存储过程文档,不好你举报我。含好多ORACLE SCOTT中emp表的实例。
能不能写个动态的业务,只输入存储过程名称,自动...只写一个通用方法,就可以调用所有的存储过程。只根据输入不同的存储过程名称、参数内容,自动调用不同的存储过程。 已经使用在多个项目中 全开源项目 请放心下载
oracle 存储过程的基本语法非让大于20个字,好无聊啊
2.2.4 带参数游标的使用方法 20 2.3 动态SQL语句 21 2.4 例外处理 22 2.5 一个完整的PL/SQL实例 24 第三章 oracle存储过程讨论 25 3.1 函数(FUNCTION) 26 3.1.1 用户函数创建,编译,删除 26 3.1.2 参数传递 27 ...
oracle存储过程中入参是逗号分隔,并且参数要使用在in过滤语句中查询数据。处理的方法与实现
Java调用Oracle存储过程的方法
在此文档中,我们将介绍如何使用 Spring jdbcTemplate 调用 Oracle 存储过程返回 List 集合。 Oracle 存储过程 ------------- 在 Oracle 数据库中,存储过程是一种可以被调用执行的数据库对象。存储过程可以实现...
此文档对oracle存储过程做了详细讲解,游标用法 变量定义,触发器,序列,DML DCL DDL
Java中Oracle存储过程的使用方法研究.pdf
存储过程中实现了游标的用法,并且返回一个数据集的方式。
reportviewer教程 oracle存储过程教程 reportviewer教程 oracle存储过程教程
1、请先在Oracle数据中新建存储过程 2、修改代码中的相关参数。比如,连接数据库字符串,查询的sql语句等 注意:查询sql语句中必须包含rownum字段,别名是rn。rownum是Oracle关键字。 存储是来自...
oracle存储过程超详细使用手册,介绍oracle中存储过程的具体使用方法