`
学会做人
  • 浏览: 121298 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
阅读更多
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]
分享到:
评论

相关推荐

    *oracle存储过程总结*oracle存储过程总结*

    根据提供的文件信息,我们可以归纳出以下Oracle存储过程的相关知识点: ### Oracle存储过程基础概念 ...以上是基于提供的部分内容对Oracle存储过程进行的总结,包含了从基础概念到具体应用实例的全面解析。

    Oracle存储过程总结

    Oracle存储过程总结,Oracle存储过程总结,Oracle存储过程总结。

    oracle存储过程总结.doc

    Oracle 存储过程总结 Oracle 存储过程是数据库系统中的一种重要组件,它可以将复杂的业务逻辑封装在一起,提高数据库系统的性能和可维护性。本篇文章将对 Oracle 存储过程进行总结,包括创建存储过程、变量、游标、...

    oracle存储过程解锁

    总结来说,解锁Oracle存储过程的过程涉及到识别锁定会话、查询锁定详情,并最终终止锁定会话以释放锁定。这一系列操作需要对Oracle数据库的系统视图有深入的理解,同时也需要具备一定的数据库管理经验。通过遵循上述...

    帆软报表Oracle存储过程解决storeParameter1参数试用插件

    总结起来,"帆软报表Oracle存储过程解决storeParameter1参数试用插件"主要是针对在调用无参数Oracle存储过程时出现的异常问题提供的一种解决方案。通过安装并配置这个插件,用户可以顺利地在帆软报表中调用不包含...

    oracle 存储过程 函数 dblink

    ### Oracle存储过程、函数与DBLink详解 #### 一、Oracle存储过程简介 在Oracle数据库中,存储过程是一种预编译好的SQL代码集合,它可以接受输入参数、返回单个值或多个值,并能够执行复杂的数据库操作。存储过程...

    oracle 存储过程批量提交

    ### Oracle存储过程批量提交知识点详解 在Oracle数据库中,存储过程是一种重要的数据库对象,它可以包含一系列SQL语句和控制流语句,用于实现复杂的业务逻辑处理。存储过程不仅可以提高应用程序性能,还可以确保...

    Oracle存储过程返回结果集

    总结来说,Oracle存储过程通过`OUT`参数和`SYS_REFCURSOR`类型能够方便地返回结果集。在Java应用中,我们可以使用JDBC的`CallableStatement`和`ResultSet`来调用存储过程并处理返回的结果。这种方式在处理大量数据或...

    oracle 存储过程学习总结

    Oracle存储过程学习总结涵盖了Oracle中存储过程的编写与应用,涉及到字符串处理、游标使用、PL/SQL编程等方面的知识点。 首先,字符串处理是存储过程中常见的操作。文章中提到了多个内置函数,如CONCAT用于连接字符...

    Oracle存储过程中使用临时表

    总结来说,Oracle存储过程中使用临时表是优化数据处理和提高性能的有效手段,正确理解和运用会话级和事务级临时表,能更好地满足复杂的业务需求。在设计和实现存储过程时,应根据具体的应用场景选择合适的临时表类型...

    用java调用oracle存储过程总结

    } } catch (SQLException ex1) { } } }}```总结与注意事项调用Oracle存储过程在Java中主要使用`CallableStatement`,通过占位符`?`来代表参数,并使用`setXXX`方法设置IN参数,`registerOutParameter`注册OUT或IN...

    Java调用oracle存储过程总结

    本文将全面总结如何使用Java与Oracle存储过程进行交互。 首先,理解Oracle存储过程的基本概念。存储过程是预编译的SQL语句集合,存储在数据库中,可以接受参数、执行一系列操作并返回结果。它们提高了性能,减少了...

    Oracle存储过程、触发器

    总结来说,Oracle存储过程和触发器是数据库编程的重要工具,它们有助于提高代码的复用性和数据库的性能。而`ProcTest.java`这样的Java程序则提供了一种与Oracle数据库交互的方式,可以执行存储过程并处理结果。通过...

    访问ORACLE存储过程

    在.NET环境中,访问Oracle存储过程是一项常见的任务,用于执行数据库中的复杂操作,如数据处理、事务管理和业务逻辑。本文将详细介绍如何使用OracleClient数据提供者在C#中调用存储过程,包括带输入、输出参数的存储...

    oracle 存储过程学习经典

    - **总结**: Oracle存储过程是数据库中非常重要的组成部分,它不仅可以提高应用程序的性能,还可以简化复杂的数据处理逻辑。了解并掌握Oracle存储过程的使用方法对于数据库开发者来说至关重要。 - **未来发展方向**:...

    Oracle存储过程超详细使用手册

    Oracle存储过程超详细使用手册 Oracle存储过程总结

    oracle的存储过程如何返回结果集

    ### Oracle存储过程返回结果集详解 #### 一、概述 在Oracle数据库中,存储过程是一种重要的编程组件,它能够执行一系列SQL语句并处理复杂的业务逻辑。存储过程的一个常见应用场景是返回结果集(Record Set),这有...

    Oracle存储过程机密工具

    总结来说,Oracle存储过程的解密是一项技术挑战,需要对Oracle数据库的内部机制有深入的理解。尽管Oracle官方未提供直接的解密工具,但通过第三方工具和技巧,我们有可能恢复加密的存储过程源代码。这个过程中涉及的...

    Oracle存储过程测试总结.ppt

    Oracle存储过程测试总结.ppt

    delphi调用Oracle的存储过程

    #### Oracle存储过程创建 首先,我们需要在Oracle数据库中创建一个存储过程。以下是一个示例存储过程`pkg_test`的创建脚本: ```sql CREATE OR REPLACE PACKAGE pkg_test AS TYPE myrctype IS REF CURSOR; ...

Global site tag (gtag.js) - Google Analytics