- 浏览: 158830 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (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 5171.--加快关联表查询速度,设置每次块读取数 S ... -
oracle 导入导出
2011-10-30 20:40 1090Oracle数据导入导出imp/ex ... -
oracle的dblink和synonym
2011-08-14 22:22 1811简单的介绍oracle的dblink和synonym的创建、删 ... -
几种数据库的sql分页
2011-07-31 20:05 882Oracle 分页分页查询格式(第1种):SELECT * F ... -
几种连接方式
2011-07-31 17:10 677-- 创建两张实体表来演示create table SYS_U ... -
PowerDesigner15正向工程,PowerDesigner15反向工程
2011-07-25 20:09 1194PowerDesigner15正向工程,PowerDesign ...
相关推荐
Oracle 存储过程学习目录是 Oracle 存储过程学习的基础知识,了解 Oracle 存储过程的基本语法、基础知识和一些常见问题的解决方法是非常重要的。本文将从 Oracle 存储过程的基础知识开始,逐步深入到 Oracle 存储...
结合实例,介绍了oracle存储过程的用法,包括定义,变量类型,游标,流程分支语句的使用
本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...
### 描述:“如果存储过程被锁住,可以使用这个存储过程解锁方法” #### 解析: 当遇到存储过程被锁定的情况时,通常可以通过查询`dba_ddl_locks`视图来查找锁定的详细信息。例如,要检查名为`prc_exec_day`的存储...
Oracle存储过程unwrap解密工具主要用于处理Oracle数据库中的加密存储过程。在Oracle数据库系统中,为了保护敏感代码或数据,开发人员有时会选择对存储过程进行加密。然而,当需要查看、调试或恢复这些加密的存储过程...
此外,对于Oracle存储过程,理解其基本概念和使用方法也是必要的。存储过程是预编译的SQL语句集合,可以封装复杂的业务逻辑,提高数据处理效率,并通过参数传递数据。在与帆软报表集成时,正确理解和调用存储过程能...
Oracle存储过程是数据库管理系统...以上就是Oracle存储过程的基本语法,包括如何定义、使用参数、控制流结构以及与游标交互的方法。掌握这些基础,开发者可以构建复杂的应用逻辑,并在数据库层面上高效地处理数据。
本文主要介绍了Oracle存储过程的概念、创建和调用方法,以及如何使用DBLink实现跨库操作。存储过程提供了强大的数据库处理能力,而DBLink则使得不同数据库实例之间的交互变得更加方便和高效。掌握这些技术对于提高...
Oracle存储过程是数据库管理系统中的一种重要特性,它允许开发者编写一系列SQL语句和PL/SQL块,形成可重复使用的代码单元。这篇博客“oracle存储过程-帮助文档”可能提供了关于如何创建、调用和管理Oracle存储过程...
本篇将深入探讨如何在Oracle存储过程中创建并返回一个结果集,并结合Java代码展示如何在应用程序中使用这个结果集。 首先,我们需要理解`OUT`参数的概念。在Oracle存储过程中,`IN`参数用于传递数据到过程,`OUT`...
### Oracle存储过程基本语法及示例 在Oracle数据库中,存储过程是一种强大的工具,用于封装一组SQL语句或PL/SQL代码块,以便在数据库服务器上执行特定的任务。存储过程可以提高应用程序性能、确保数据完整性并简化...
### Oracle存储过程的基本语法知识点详解 #### 一、Oracle存储过程概述 Oracle存储过程是一种预编译的SQL脚本集合,它可以包含复杂的控制流逻辑、数据处理操作等,并且能够被其他应用程序或用户通过简单的调用来...
本文将详细讲解如何在C#中使用自定义列表(List)作为参数调用Oracle存储过程,以及实现这一功能的关键技术和注意事项。 首先,我们需要了解Oracle数据库中的PL/SQL类型,例如VARCAR2、NUMBER等,它们对应于C#中的...
以下是一个简单的示例,展示了如何调用一个不带参数的Oracle存储过程: ```java Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); session....
本示例展示了如何使用 CallabledStatement 来调用 Oracle 存储过程,并实现 IN OUT 参数和游标类型参数的使用。这种方法可以提高应用程序的性能和安全性。同时,游标类型参数的使用可以实现数据的批量处理,提高应用...
#### Oracle存储过程基本语法 存储过程在Oracle中的创建遵循以下基本结构: ```sql CREATE OR REPLACE PROCEDURE 存储过程名字 ( 参数1 IN 类型, 参数2 OUT 类型, 参数3 INOUT 类型 ) AS 变量声明区; BEGIN ...
本手册将详细介绍 Oracle 存储过程的使用方法和相关知识点。 1. 创建存储过程 创建存储过程的基本语法为:`CREATE OR REPLACE PROCEDURE procedure_name (parameter1, parameter2, ...) AS ... BEGIN ... END;`...
**一、Oracle存储过程** 存储过程是一组预编译的SQL语句和PL/SQL代码,存储在数据库服务器上,可以按需调用。存储过程的优点包括提高性能、减少网络流量、增强安全性以及实现模块化编程。 1. **创建存储过程**:...
本话题将详细探讨如何在Oracle存储过程中调用外部的批处理脚本,如Windows系统的BAT文件,以实现数据库操作与系统命令的集成。 首先,`Oracle存储过程`是一种预编译的SQL和PL/SQL代码集合,可以被多次调用以执行...
在.NET环境中,访问Oracle存储过程是一项常见的任务,用于执行数据库中的复杂操作,如数据处理、事务管理和业务逻辑。本文将详细介绍如何使用OracleClient数据提供者在C#中调用存储过程,包括带输入、输出参数的存储...