`
touchmm
  • 浏览: 1037407 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

oracle过程

 
阅读更多

<!-- [if gte mso 9]><xml><w:WordDocument><w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel><w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery><w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery><w:DocumentKind>DocumentNotSpecified</w:DocumentKind><w:DrawingGridVerticalSpacing>7.8</w:DrawingGridVerticalSpacing><w:View>Normal</w:View><w:Compatibility></w:Compatibility><w:Zoom>0</w:Zoom></w:WordDocument></xml><![endif]-->

--==============================

--author:yeeXun

--date:发表于 @ 2010年12月22日 15:37:00

--address:Jau 17-304

--==============================

PL/SQL语句块有两种:命名块和匿名块。

他们的区别在于:

a.匿名块没有自己的名称,以 declare begin 开始,每次使用时都要进行编译;匿名块不在数据库中存储并且不能直接从其他的 PL/SQL 块中调用。

b.命名块可以存储在数据库中并在适当的时候运行。

过程:是一个PL/SQL 语句块,它存储在数据字典中并可被应用程序调用。过程没有返回值。

使用存储过程的好处:能够实施数据的安全性。


1. 过程的创建

语法:

create[orreplace]procedure过程名称

[(参数 [{in|out|inout}] 类型,

·······

(参数 [{in|out|inout}] 类型 )]

[authid{current_user|designer}]

{is|as}

begin

过程体

end

下面是具体参数的解释:

orraplace:如果加上这个关键字,那么新创建的过程将取代旧的过程。具体执行了撤销和重建两个操作。

如果要创建的过程已经存在,而我们没有将其先删除,将会得到“ORA-955 :该名称已被当前对象使用”的错误。

in:表明此参数为传入参数,调用处传实参给过程的形参,并进行相应的操作。

out:表明此参数为传出参数,当调用过程,完成相应操作时,此参数作为返回值,返回到过程调用处。

inout:表明此参数既是传入参数,又是传出参数。过程调用处给过程传参,当过程结束时,此参数作为返回值给调用过程处。

这里创建一个存储过程

SQL>createorreplaceprocedurecurrent_time

2as

3curtimevarchar2;

4begin

5selectto_char(sysdate,'yyyy/mm/ddhh24:mi:ss')

6intocurtime

7fromdual;

8dbms_output.put_line('现在时间是:'||chr(9)||curtime);

9endcurrent_time;


2. 存储过程的调用

·直接执行execute 命令

语法:execute 过程名称 [( 参数 1 ,参数 2 ......)]

executecurrent_time;

·在PL/SQL 语句块中调用

......

current_time;

......

3. 参数设置和传递

a) 参数模式

有三种模式,上面介绍的三种:in out inout

b) 使用authid 选项创建存储过程。

当声明存储过程时,可以使用authidcurren_user authiddesigner 选项来制定 oracle 在执行过程时使用的权限域。

·authidcurren_user :在调用时, oracle 使用调用该过程的用户权限域执行该过程,此时调用者必须有权限访问存储过程中所涉及到的所有数据库对象的权限。

·authiddesigner :为默认选线, oracle 将使用过程所有者的权限来执行

过程。

c) 在形参和实参之间传递值

In模式 : 实参到形参的传递,过程结束时,结尾处的形参被赋值给对应的实参。

Out模式:过程内部的 out 模式参数已经被初始化为 NULL

Inout模式:传入传出,过程结束时,结尾处的形参被赋值给对应的实参。

d) 对形参的限制

用户不能强制制定参数char varchar2 的长度,以及制定 number 参数的精 度和小数后位数。

但是可以使用%TYPE 来说明参数。如果以参数用 %TYPE 声明,并且说明 %TYPE 的 变量也是强制类型的话,则该强制说明将作用在形参上而不是实参上。

e) 按引用和按值传递参数

子程序参数可以按两种方式传递:按引用或按值传递。

按引用传递:指针的传递,效率高,适用于处理集合类型参数,如:表、数组

按值传递:实参的值被赋予对应形参。

PL/SQL的默认方式是,对参数 in 执行按引用传递,对参数 out inout 按值 传递。

f) 使用nocopy 参数

如果使用了nocopy 的编译选项,则 PL/SQL 编译器将按引用传递参数。语法:

参数名称[ 模式 ]nocopy 数据类型

:对in 模式参数使用 nocopy 将会产生编译错误,因为 in 模式参数总是按引用传 递, nocopy 不能更改其引用方式。

在下列情况下,编译器将忽略nocopy 项:

·参数为索引表的成员时

·实参被强制制定精度、比例或notnull

·实参和形参都是记录类型,二者是一隐式方式或使用了%rowtype 类型声明时, 作用在对应字段的强制说明不一致

·传递实参需要隐式类型转换时

·子程序涉及远程调用时

使用nocopy 的主要优点:提高程序的效率,在传递大型 PL/SQL 表时,其优点更 为显著。

<!-- [if gte mso 9]><xml><w:WordDocument><w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel><w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery><w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery><w:DocumentKind>DocumentNotSpecified</w:DocumentKind><w:DrawingGridVerticalSpacing>7.8</w:DrawingGridVerticalSpacing><w:View>Normal</w:View><w:Compatibility></w:Compatibility><w:Zoom>0</w:Zoom></w:WordDocument></xml><![endif]-->

4.过程的删除

语法:dropprocedure 过程名

例如:dropprocedurecurrent_time;

分享到:
评论

相关推荐

    oracle过程解析XML,支持超4000

    oracle过程解析XML,支持超4000,并很方便的 . 出结果 oracle过程解析XML,支持超4000 oracle过程解析XML,支持超4000

    一个简单的oracle过程被使用的例子,包含架包

    Oracle过程是数据库管理系统中的一种重要组成部分,主要用于存储和执行复杂的业务逻辑或数据库操作。在这个例子中,我们将深入探讨Oracle过程的使用,以及如何通过“架包”(可能指的是Oracle的包,即PL/SQL包)来...

    struts2+oracle过程调用

    为了调用Oracle过程,我们通常会在Action类中创建一个方法,该方法负责与数据库交互。 在Oracle数据库中,过程(Procedure)是一种存储的PL/SQL代码块,可以接受参数、执行操作并返回结果。它们可以被看作是数据库...

    oracle 存储过程导出excel

    oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel

    安装Oracle过程文档.pdf

    安装Oracle过程文档.

    VFP调用ORACLE存储过程数据库接口程序.pdf

    本文将介绍如何在Windows平台上利用VFP调用Oracle存储过程,以及实现Oracle数据库内容向VFP数据表的自动转换。 首先,我们来了解Oracle数据库。Oracle数据库是一种基于SQL的大型关系型数据库系统,它以支持多用户、...

    C#调用oracle方法(包括调用存储过程)

    ### C#调用Oracle方法(包括调用存储过程) 在.NET框架中,使用C#语言进行数据库操作是一项常见的任务。本文将详细介绍如何使用C#语言连接Oracle数据库,并演示如何调用Oracle存储过程,特别是带有输出参数的情况。...

    oracle过程、函数和程序包.pptx

    oracle过程、函数和程序包.pptx

    登录Oracle过程中遇到的问题及解决方案.docx

    登录Oracle过程中遇到的问题及解决方案.docx

    sql2005连接oracle过程全解和增删改查语句

    sql2005连接oracle过程全解和sql2005连接oracle增删改查语句

    linux-安装oracle过程

    在Linux系统中安装Oracle数据库是一个复杂的过程,尤其对于Oracle 10g Release 2这样的较旧版本。以下是对标题和描述中涉及的知识点的详细说明: 1. **安装环境**:在虚拟化环境中(例如VMware)运行Red Hat ...

    oracle存储过程学习经典入门

    本文将从 Oracle 存储过程的基础知识开始,逐步深入到 Oracle 存储过程的高级应用,包括 Hibernate 调用 Oracle 存储过程和 Java 调用 Oracle 存储过程的方法。 Oracle 存储过程基础知识 Oracle 存储过程是 Oracle...

    在.NET中调用Oracle存储过程经验总结.doc

    ### 在.NET中调用Oracle存储过程经验总结 #### 一、引言 随着.NET平台的广泛应用,越来越多的应用程序选择.NET框架进行开发。与此同时,Oracle数据库因其高性能和稳定性被广泛采用。因此,在.NET环境中如何有效地...

    oracle存储过程解锁

    在IT领域,尤其是在数据库管理与优化中,存储过程的解锁是一项关键技能,尤其对于Oracle数据库而言。当存储过程被锁定时,可能会影响系统的性能和稳定性,因此掌握如何解锁存储过程至关重要。以下是对“oracle存储...

    excel(64位)vba连接oracle 11g执行存储过程并返回结果集案例

    64位excel连接64位11goracle执行存储过程,返回结果集。

    Python使用cx_Oracle调用Oracle存储过程的方法示例

    本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...

    oracle存储过程unwrap解密工具.zip

    Oracle存储过程unwrap解密工具主要用于处理Oracle数据库中的加密存储过程。在Oracle数据库系统中,为了保护敏感代码或数据,开发人员有时会选择对存储过程进行加密。然而,当需要查看、调试或恢复这些加密的存储过程...

    oracle 事务 回滚 存储过程

    在Oracle数据库环境中,事务管理与存储过程的结合是实现数据一致性、事务回滚以及错误处理的关键技术之一。本文将深入探讨“Oracle事务回滚存储过程”这一主题,旨在理解其核心概念、工作原理以及实际应用。 ### ...

    oracle存储过程加密破解

    oracle存储过程加密破解 0

    hibernate query调用oracle存储过程

    Oracle数据库作为企业级的主流数据库系统,提供了丰富的存储过程和函数功能,以实现复杂的数据处理逻辑。而Hibernate作为一种流行的Java持久化框架,它允许开发者通过ORM(对象关系映射)方式与数据库进行交互。本篇...

Global site tag (gtag.js) - Google Analytics