`
regedit_123
  • 浏览: 323393 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

oracle之nocopy关键词

阅读更多
If the subprogram exits early with an exception, the values of OUT and IN OUT parameters (or object attributes) might still change. To use this technique, ensure that the subprogram handles all exceptions.

CREATE OR REPLACE PROCEDURE SP_TEST (P_OUT OUT NOCOPY NUMBER)
AS
BEGIN
   P_OUT :=1;
   RAISE_APPLICATION_ERROR(-20001,'ERROR');
   P_OUT :=2;
   RETURN;
END;
/


DECLARE
   V_OUT NUMBER :=0;
BEGIN
   DBMS_OUTPUT.PUT_LINE('BEFORE CALLING SP_TEST: V_OUT = '||V_OUT);
   SP_TEST(V_OUT);
EXCEPTION
   WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('AFTER CALLING SP_TEST: V_OUT = '||V_OUT);
END;
/
使用了nocopy之后,如果在被调用过程中没有很好的异常处理机制,会导致out参数返回的值产生不确定性,反而会影响程序结果的正确性。所以有些场景还是不使用nocopy为好。



输出:
BEFORE CALLING SP_TEST: V_OUT = 0
AFTER CALLING SP_TEST: V_OUT = 1

去掉NOCOPY的输出:
BEFORE CALLING SP_TEST: V_OUT = 0
AFTER CALLING SP_TEST: V_OUT = 0

分享到:
评论

相关推荐

    Oracle 子程序参数模式,IN,OUT,NOCOPY

    总结起来,Oracle 子程序参数模式IN、OUT和NOCOPY提供了灵活的数据传递机制,IN用于单向传递数据,OUT用于传出结果,而NOCOPY则是在OUT基础上尝试优化性能的一种方式,允许子程序直接修改调用者的变量。了解和正确...

    Oracle P/L SQL实现FTP上传、下载功能

    Oracle P/L SQL实现FTP上传、下载功能,以下是此过程包的头部,包体经常打包处理plb,感兴趣用户可以下载下来。 --Oracle上的FTP功能 Create or Replace Package UTL_FTP AUTHID CURRENT_USER as Type Connection ...

    oracle 创建wm_concat函数

    ### Oracle 创建wm_concat函数 #### 知识点一:Oracle 10G及以下版本的wm_concat函数自定义实现 在Oracle 10G及更早版本中,并没有内置的`wm_concat`函数,该函数主要用于对一组字符串进行连接操作。为了在这些...

    Oracle sdo_geometry空间坐标系转换

    geometry IN OUT NOCOPY MDSYS.SDO_GEOMETRY, from_srs_id IN NUMBER, to_srs_id IN NUMBER ) ``` - `geometry`: 需要转换的几何对象。 - `from_srs_id`: 当前几何对象所在的坐标系统ID。 - `to_srs_id`: 目标...

    从Oracle的FORM中调用REPORT.rar

    parameter_list IN OUT NOCOPY PARAM_LIST, return_code OUT NUMBER, return_message OUT VARCHAR2); ``` 其中,`report_name`是报表的名称,`parameter_list`用于传递报表所需的参数,`return_code`和`...

    Oracle_plsql基本语法笔记.txt

    Oracle 常用命令举例 标题 基本语法 %type用法,%rowtype用法,TYPE用法 游标的使用 for 循环 loop循环 while循环 if / else 的用法 case 的用法 标题 错误定义 error的设定 exception用法 ...

    Oracle PLSQL编程最佳实践中文版

    ### Oracle PL/SQL编程最佳实践知识点汇总 #### 概述 - **目标**: 提供一套完整的Oracle PL/SQL编程指导原则。 - **适用对象**: 面向所有使用Oracle数据库进行开发的技术人员。 #### 规范 - **命名规则**: - ...

    Oracle.PL.SQL程序设计 下册

    - 在PL/SQL中,变量需要先声明后使用,可以使用`:=`进行赋值,也可以通过`IN OUT`或`IN OUT NOCOPY`参数传递变量。 4. **流程控制** - 控制流程的结构包括IF-THEN-ELSIF-ELSE、CASE、FOR循环、WHILE循环、GOTO和 ...

    oracle存储过程学习经典[语法+实例+调用]

    - `NOCOPY`:当参数类型为`INOUT`时,使用`NOCOPY`关键字可避免复制参数的值,从而节省内存资源。 - **权限管理**: - `AUTHID CURRENT_USER`:表示存储过程内的操作权限与当前执行用户相同。 - `AUTHID DEFINER...

    Oracle 20071025_PLSQLTuning.pdf

    根据提供的文件信息,我们可以深入探讨Oracle PL/SQL性能调优中的关键知识点,这些知识点主要集中在“编码实践”和“系统配置”两个方面。 ### 一、编码实践 #### 数值数据类型的选择 在PL/SQL中,数值数据类型的...

    Oracle Stream + AQ + JMS 搭建步骤

    ### Oracle Stream + AQ + JMS 搭建详解 #### 一、背景及目标 在当前数据密集型应用环境中,数据库变更数据的实时捕获与处理变得尤为重要。Oracle Stream技术结合Oracle的高级队列(Advanced Queuing, AQ)以及...

    Oracle 中PLSQL应用优化.pdf

    Oracle中的PL/SQL应用优化是数据库管理中一个关键的话题,主要关注如何提高代码执行效率和减少资源消耗。本文档详细探讨了多个与PL/SQL优化相关的主题,包括数据类型的选取、语句建议、批量处理、新SQL语句的使用...

    Oracle_PLSQL_存储过程

    - **存储过程作用:** 在Oracle中,存储过程可以用于封装这些规则和逻辑,使之成为可重用的组件。 **创建权限:** - **CREATE PROCEDURE权限:** 允许用户创建存储过程。 - **CREATE ANY PROCEDURE权限:** 允许...

    ORACLE_PLSQL性能调优

    Oracle作为业界领先的数据库解决方案之一,其PL/SQL语言更是被广泛应用于数据库应用程序开发之中。本文将深入探讨如何通过合理运用PL/SQL特性来实现Oracle数据库应用的性能提升。 #### 前提条件 - **听众要求**:...

    oracle命令集合

    - `CREATE OR REPLACE PROCEDURE procedure_name (param1 IN/OUT/NOCOPY datatype, ...) AS ... BEGIN ... END;` 六、备份与恢复 1. 数据泵导出(EXPDP): - `expdp username/password directory=dir_name dump...

    Oracle PLSQL调优

    ### Oracle PL/SQL调优知识点详解 #### 一、序言 在开始深入探讨Oracle PL/SQL调优之前,我们先来简要回顾一下讲座的背景与环境设置。本讲座面向具备一定PL/SQL基础知识的听众,主要内容涵盖编程技巧与系统配置两大...

    oracle数据库中查看系统存储过程的方法

    下面将详细解释如何在Oracle数据库中查看系统存储过程,以及与之相关的知识点。 首先,我们可以使用`DBA_SOURCE`视图来查看存储过程的源代码。`DBA_SOURCE`包含了数据库中所有对象的源代码信息。例如,如果你想知道...

    Oracle_plsql讲义:第22章 创建子程序和包.ppt

    Oracle PL/SQL 子程序和包的概念和应用 本章要点: * 理解子程序(过程、函数)及包的概念 * 掌握如何创建、执行和删除过程、函数及包的方法 * 了解形参和实参的区别以及不同参数模式的特征 * 灵活使用过程、函数...

    oracle常用命令手册

    使用NOCOPY选项可强制参数按地址传递,从而可能提高性能。 ### 5. 软件包与封装 - **软件包 (PACKAGE)**:用于组织和封装PL/SQL代码。软件包包括一个规范部分和一个主体部分,前者定义了接口(如过程、函数和类型...

Global site tag (gtag.js) - Google Analytics