- 浏览: 1198843 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (361)
- java综合 (33)
- 项目管理 (10)
- 工作流 (6)
- spring (11)
- hibenate (17)
- struts (0)
- javascript,html,css,ajax,jquery (11)
- IDE (9)
- 生活 (0)
- 工作 (0)
- 杂记 (1)
- 数据库 (96)
- 服务器 (5)
- 可视编辑 (0)
- freemarker (6)
- 操作系统 windows (13)
- web页面 (6)
- jms (15)
- 调优 (4)
- 测试和bug管理 (2)
- 原理 (1)
- 項目-atf (17)
- 安全 (3)
- xml (4)
- 操作系统 liunx (21)
- 网络 (22)
- office (11)
- 设计 (2)
- 软件 (1)
- 数据库 mysql (6)
- 胖客户端-flex (1)
- 正则 (9)
- oracle- liunx (3)
- sql2000 (2)
- 模式 (1)
- 虚拟机 (2)
- jstl (2)
- 版本控制 打包工具 (0)
- AOP (1)
- demo (1)
- 小软件 (2)
- 感恩 (1)
- iphone 4 (1)
- 反欺诈业务经验整理 (0)
最新评论
-
sea0108:
mark
java内存模型 -
XingShiYiShi:
方便把:testPNR();具体实现发出来吗?谢谢
用正则表达式解析 航信的电子客票和pnr报文 -
wh359126613:
如果js和webservice不在同一个服务器上,有跨域问题如 ...
使用javascript调用webservice示例 -
雨飛雁舞:
...
oracle 动态性能(V$)视图 -
ouyang1224:
好东西
oracle 动态性能(V$)视图
1 存储子程序
存储子程序是指被命名的PL/SQL块,以编译的形式存储在数据库服务器中,可以在应用程序中进行调用,是PL/SQL程序模块化的一种体现。PL/SQL中的存储子程序包括存储过程和(存储)函数两种。通常,存储过程用于执行特定的操作,不需要返回值;而函数则用于返回特定的数据。在调用时,存储过程可以作为一个独立的表达式被调用,而函数只能作为表达式的一个组成部分被调用。
存储子程序是以独立对象的形式存储在数据库服务器中的,因此是一种全局结构,与之对应的是局部子程序,即嵌套在PL/SQL块中的局部过程和函数,其存储位置取决于其所在的父块的位置。
2 存储过程
3.存储过程的创建
create [or replace] procedure procedure_name(
parameter1_name [mode] datatype [default|:=value]
[,parameter2_name [mode] datatype [default|:=value],...]
)
as|is
/*declarative section is here*/
begin
/*executable section is here*/
exception
/*exception section is here*/
end[procedure_name];
--参数说明:
(1)参数的模式
PL/SQL子程序参数模式包括IN,OUT,IN OUT三种。
* IN(默认参数模式)表示当过程被调用时,实参值被传递个形参;在过程内,
形参起常数作用,只能读改参数,而不能修改该参数;当子程序调用
结束返回调用环境时,实参没有被改变。
* OUT表示当过程被调用时,实参值被忽略;在过程内,形参起未初始化的PL/SQL
变量作用,初始值为NULL,可以进行读/写操作;当子程序调用结束后
返回调用环境时,形参的值被赋给实参。
* IN OUT表示当过程被调用时,实参值被传递给形参;在过程内,形参起已初始
化的PL/SQL变量作用,可读可写;当子程序调用结束返回调用环境时,
形参值被赋给实参。
(2)参数的限制
在声明参数时,不能定义形参的长度或精度、刻度,他们是作为参数传递机制的一部分被传递的,是由实参决定的。
(3)参数传递方式
当子程序被调用时,实参与形参之间值的传递方式取决于参数的模式。IN参数为引用传递,即实参指针被传递给形参;OUT,IN OUT参数为值传递,即实参的值被复制给形参。
--例如,创建一个存储过程,以部门号为参数,查询该部门的平均工资,并输出该部门中比平均工资高的员工号,员工名。
create or replace procedure show_emp(
p_deptno emp.deptno%type
)
as
v_sal emp.sal%type;
begin
select avg(sal) into v_sal from emp where deptno=p_deptno;
dbms_output.put_line(p_deptno||' '||'average salary is:'||v_sal);
for v_emp in (select * from emp where deptno=p_deptno and sal>v_sal)
loop
dbms_output.put_line(v_emp.empno||' '||v_emp.ename);
end loop;
exception
when no_data_found then
dbms_output.put_line('the department doesn''t exists!');
end show_emp;
通常,存储过程不需要返回值,如果需要返回一个值可以通过函数调用来实现。但是如果希望返回多个值,可以使用OUT或IN OUT模式参数来实现。
--例如,创建一个存储过程,以部门号为参数,返回该部门的人数和平均工资。
create or replace procedure return_deptinfo(
p_deptno emp.deptno%type,
p_avgsal out emp.sal%type,
p_count out number
)
as
begin
select avg(sal),count(*) into p_avgsal,p_count from emp
where deptno=p_deptno;
exception
when no_data_found then
dbms_output.put_line('the department don''t exists!');
end return_deptinfo;
4 存储过程的调用
存储子程序创建后,以编译的形式存储于数据库服务器端,供应用程序调用。如果不调用,存储子程序是不会执行的。通过子程序名称调用子程序时,实参的数量、顺序、类型要与形参的数量、顺序、类型相匹配。此外,由于OUT、IN OUT模式参数在子程序调用结束时,将形参的值赋给实参,因此实参必须是变量,而不能是常量,但是对于IN模式的实参可以是常量,也可以是变量。
(1)在SQL*PLUS中调用存储过程
execute show_emp(10);
或
call show_emp(10);
(2)在PL/SQL程序中调用存储过程
--在PL/SQL程序中,存储过程可以作为一个独立的表达式被调用。
declare
v_avgsal emp.sal%type;
v_count number;
begin
show_emp(20);
return_deptinfo(10,v_avgsal,v_count);
dbms_output.put_line(v_avgsal||' '||v_count);
end;
/
5. 存储过程的管理
(1)修改存储过程
为了修改存储过程,可以先删除该存储过程,然后重新创建,但是这样需要为新创建的存储过程重新进行权限分配。如果采用create or replace procedure方式重新创建并覆盖原由的存储过程,则会保留原有的权限分配。
(2)重新编译存储过程
使用alter procedure...compile命令重新编译存储过程。
alter procedure show_emp compile;
(3)删除存储过程
drop procedure show_emp; [/size]
存储子程序是指被命名的PL/SQL块,以编译的形式存储在数据库服务器中,可以在应用程序中进行调用,是PL/SQL程序模块化的一种体现。PL/SQL中的存储子程序包括存储过程和(存储)函数两种。通常,存储过程用于执行特定的操作,不需要返回值;而函数则用于返回特定的数据。在调用时,存储过程可以作为一个独立的表达式被调用,而函数只能作为表达式的一个组成部分被调用。
存储子程序是以独立对象的形式存储在数据库服务器中的,因此是一种全局结构,与之对应的是局部子程序,即嵌套在PL/SQL块中的局部过程和函数,其存储位置取决于其所在的父块的位置。
2 存储过程
3.存储过程的创建
create [or replace] procedure procedure_name(
parameter1_name [mode] datatype [default|:=value]
[,parameter2_name [mode] datatype [default|:=value],...]
)
as|is
/*declarative section is here*/
begin
/*executable section is here*/
exception
/*exception section is here*/
end[procedure_name];
--参数说明:
(1)参数的模式
PL/SQL子程序参数模式包括IN,OUT,IN OUT三种。
* IN(默认参数模式)表示当过程被调用时,实参值被传递个形参;在过程内,
形参起常数作用,只能读改参数,而不能修改该参数;当子程序调用
结束返回调用环境时,实参没有被改变。
* OUT表示当过程被调用时,实参值被忽略;在过程内,形参起未初始化的PL/SQL
变量作用,初始值为NULL,可以进行读/写操作;当子程序调用结束后
返回调用环境时,形参的值被赋给实参。
* IN OUT表示当过程被调用时,实参值被传递给形参;在过程内,形参起已初始
化的PL/SQL变量作用,可读可写;当子程序调用结束返回调用环境时,
形参值被赋给实参。
(2)参数的限制
在声明参数时,不能定义形参的长度或精度、刻度,他们是作为参数传递机制的一部分被传递的,是由实参决定的。
(3)参数传递方式
当子程序被调用时,实参与形参之间值的传递方式取决于参数的模式。IN参数为引用传递,即实参指针被传递给形参;OUT,IN OUT参数为值传递,即实参的值被复制给形参。
--例如,创建一个存储过程,以部门号为参数,查询该部门的平均工资,并输出该部门中比平均工资高的员工号,员工名。
create or replace procedure show_emp(
p_deptno emp.deptno%type
)
as
v_sal emp.sal%type;
begin
select avg(sal) into v_sal from emp where deptno=p_deptno;
dbms_output.put_line(p_deptno||' '||'average salary is:'||v_sal);
for v_emp in (select * from emp where deptno=p_deptno and sal>v_sal)
loop
dbms_output.put_line(v_emp.empno||' '||v_emp.ename);
end loop;
exception
when no_data_found then
dbms_output.put_line('the department doesn''t exists!');
end show_emp;
通常,存储过程不需要返回值,如果需要返回一个值可以通过函数调用来实现。但是如果希望返回多个值,可以使用OUT或IN OUT模式参数来实现。
--例如,创建一个存储过程,以部门号为参数,返回该部门的人数和平均工资。
create or replace procedure return_deptinfo(
p_deptno emp.deptno%type,
p_avgsal out emp.sal%type,
p_count out number
)
as
begin
select avg(sal),count(*) into p_avgsal,p_count from emp
where deptno=p_deptno;
exception
when no_data_found then
dbms_output.put_line('the department don''t exists!');
end return_deptinfo;
4 存储过程的调用
存储子程序创建后,以编译的形式存储于数据库服务器端,供应用程序调用。如果不调用,存储子程序是不会执行的。通过子程序名称调用子程序时,实参的数量、顺序、类型要与形参的数量、顺序、类型相匹配。此外,由于OUT、IN OUT模式参数在子程序调用结束时,将形参的值赋给实参,因此实参必须是变量,而不能是常量,但是对于IN模式的实参可以是常量,也可以是变量。
(1)在SQL*PLUS中调用存储过程
execute show_emp(10);
或
call show_emp(10);
(2)在PL/SQL程序中调用存储过程
--在PL/SQL程序中,存储过程可以作为一个独立的表达式被调用。
declare
v_avgsal emp.sal%type;
v_count number;
begin
show_emp(20);
return_deptinfo(10,v_avgsal,v_count);
dbms_output.put_line(v_avgsal||' '||v_count);
end;
/
5. 存储过程的管理
(1)修改存储过程
为了修改存储过程,可以先删除该存储过程,然后重新创建,但是这样需要为新创建的存储过程重新进行权限分配。如果采用create or replace procedure方式重新创建并覆盖原由的存储过程,则会保留原有的权限分配。
(2)重新编译存储过程
使用alter procedure...compile命令重新编译存储过程。
alter procedure show_emp compile;
(3)删除存储过程
drop procedure show_emp; [/size]
发表评论
-
并发行级锁超2秒报警监控sql
2010-07-20 16:18 1940并发行级锁超2秒报警监控sql -
数据设计规范v
2010-06-22 19:47 0数据设计规范v -
Oracle 有趣排序包括那些
2010-06-20 16:51 1454按拼音排序 select * from table ... -
Oracle sql 性能优化调整
2010-06-20 16:15 1398Oracle sql ... -
Delete、Drop、Truncate的比较(转)
2010-05-31 13:39 1478Delete、Drop、Truncate的比较 关键字: d ... -
Oracle误操作解决方案(转)
2010-05-31 13:35 1395Oracle误操作解决方案 文章分类:数据库 一.误删除数 ... -
一个递归调用的存储过程
2010-04-19 01:51 1851一个递归调用的存储过程 -
oracle index学习总结
2009-12-08 10:44 19634oracle index 1.index需要储存空间 ... -
Jdbc 和hibernate
2009-11-16 23:38 1877Jdbc 和hibernate 一、Jdbc是java ... -
去掉 powerDesigner 中表设计时的 name和code联动的功能
2009-11-16 17:04 3493去掉 powerDesigner 中表设计时的 name和co ... -
oracle数据库索引未被使用的问题及其解决2007
2009-11-15 01:42 2133一次,在进行WEB页面上进行历史数据文件检查时,发现数据库访问 ... -
RMAN配置及备份与恢复练习
2009-09-27 18:06 16271.创建表空间SQL>create tablespace ... -
误删除数据后怎么立即恢复(不考虑全库备份和利用归档日志)
2009-09-27 18:01 3386要达到删除数据,有以下几种方式都可以:1、delete2、dr ... -
IMP数据到指定的表空间
2009-09-27 12:47 9106IMP数据到指定的表空间 一直以来,我都认为只要指定用户的默 ... -
ORACLE UPDATE 语句语法与性能分析
2009-09-27 09:49 1882为了方便起见,建立了以下简单模型,和构造了部分测试数据: 在 ... -
oracle job 例子
2009-09-22 12:38 3067一、设置初始化参 ... -
oracle 时间加减综合
2009-09-17 11:43 1983加法 select sysdate,add_mon ... -
详细介绍ORACLE sqlplus命令
2009-09-09 16:42 2064一、ORACLE的启动和关闭1、在单机环境下要想启动或关闭OR ... -
AWR介绍与SYSAUX空间关系 SYASAUX表空间满了 系统慢
2009-09-08 09:45 7962AWR介绍与SYSAUX空间关系 2007-11-05 14 ... -
to_char 'NLS_DATE_LANGUAG参数
2009-09-02 18:41 1484select to_char(sysdate, 'Day'), ...
相关推荐
根据提供的文件信息,我们可以归纳出以下Oracle存储过程的相关知识点: ### Oracle存储过程基础概念 ...以上是基于提供的部分内容对Oracle存储过程进行的总结,包含了从基础概念到具体应用实例的全面解析。
Oracle存储过程总结,Oracle存储过程总结,Oracle存储过程总结。
Oracle 存储过程总结 Oracle 存储过程是数据库系统中的一种重要组件,它可以将复杂的业务逻辑封装在一起,提高数据库系统的性能和可维护性。本篇文章将对 Oracle 存储过程进行总结,包括创建存储过程、变量、游标、...
总结来说,解锁Oracle存储过程的过程涉及到识别锁定会话、查询锁定详情,并最终终止锁定会话以释放锁定。这一系列操作需要对Oracle数据库的系统视图有深入的理解,同时也需要具备一定的数据库管理经验。通过遵循上述...
总结起来,"帆软报表Oracle存储过程解决storeParameter1参数试用插件"主要是针对在调用无参数Oracle存储过程时出现的异常问题提供的一种解决方案。通过安装并配置这个插件,用户可以顺利地在帆软报表中调用不包含...
### Oracle存储过程、函数与DBLink详解 #### 一、Oracle存储过程简介 在Oracle数据库中,存储过程是一种预编译好的SQL代码集合,它可以接受输入参数、返回单个值或多个值,并能够执行复杂的数据库操作。存储过程...
### Oracle存储过程批量提交知识点详解 在Oracle数据库中,存储过程是一种重要的数据库对象,它可以包含一系列SQL语句和控制流语句,用于实现复杂的业务逻辑处理。存储过程不仅可以提高应用程序性能,还可以确保...
总结来说,Oracle存储过程通过`OUT`参数和`SYS_REFCURSOR`类型能够方便地返回结果集。在Java应用中,我们可以使用JDBC的`CallableStatement`和`ResultSet`来调用存储过程并处理返回的结果。这种方式在处理大量数据或...
Oracle存储过程学习总结涵盖了Oracle中存储过程的编写与应用,涉及到字符串处理、游标使用、PL/SQL编程等方面的知识点。 首先,字符串处理是存储过程中常见的操作。文章中提到了多个内置函数,如CONCAT用于连接字符...
总结来说,Oracle存储过程中使用临时表是优化数据处理和提高性能的有效手段,正确理解和运用会话级和事务级临时表,能更好地满足复杂的业务需求。在设计和实现存储过程时,应根据具体的应用场景选择合适的临时表类型...
} } catch (SQLException ex1) { } } }}```总结与注意事项调用Oracle存储过程在Java中主要使用`CallableStatement`,通过占位符`?`来代表参数,并使用`setXXX`方法设置IN参数,`registerOutParameter`注册OUT或IN...
本文将全面总结如何使用Java与Oracle存储过程进行交互。 首先,理解Oracle存储过程的基本概念。存储过程是预编译的SQL语句集合,存储在数据库中,可以接受参数、执行一系列操作并返回结果。它们提高了性能,减少了...
总结来说,Oracle存储过程和触发器是数据库编程的重要工具,它们有助于提高代码的复用性和数据库的性能。而`ProcTest.java`这样的Java程序则提供了一种与Oracle数据库交互的方式,可以执行存储过程并处理结果。通过...
在.NET环境中,访问Oracle存储过程是一项常见的任务,用于执行数据库中的复杂操作,如数据处理、事务管理和业务逻辑。本文将详细介绍如何使用OracleClient数据提供者在C#中调用存储过程,包括带输入、输出参数的存储...
- **总结**: Oracle存储过程是数据库中非常重要的组成部分,它不仅可以提高应用程序的性能,还可以简化复杂的数据处理逻辑。了解并掌握Oracle存储过程的使用方法对于数据库开发者来说至关重要。 - **未来发展方向**:...
Oracle存储过程超详细使用手册 Oracle存储过程总结
### Oracle存储过程返回结果集详解 #### 一、概述 在Oracle数据库中,存储过程是一种重要的编程组件,它能够执行一系列SQL语句并处理复杂的业务逻辑。存储过程的一个常见应用场景是返回结果集(Record Set),这有...
总结来说,Oracle存储过程的解密是一项技术挑战,需要对Oracle数据库的内部机制有深入的理解。尽管Oracle官方未提供直接的解密工具,但通过第三方工具和技巧,我们有可能恢复加密的存储过程源代码。这个过程中涉及的...
Oracle存储过程测试总结.ppt
#### Oracle存储过程创建 首先,我们需要在Oracle数据库中创建一个存储过程。以下是一个示例存储过程`pkg_test`的创建脚本: ```sql CREATE OR REPLACE PACKAGE pkg_test AS TYPE myrctype IS REF CURSOR; ...