Oracle数据库学习笔记四——存储过程的值传递和引用传递

简介: Oracle数据库学习笔记四——存储过程的值传递和引用传递

编程语言中的4种子例程:

由两种行为定义,即形式值是否返回以及参数列表是值传递还是引用传递。

如果返回输出,子例程就是函数,如果不返回,就是过程。

所以4中子例程为:

1.值传递函数

2.引用传递函数

3.值传递过程

4.引用传递过程


pl/sql值传递过程由下列5条规则定义:


1.所有形参必须使用in模式定义为只写变量。(只能传入,不能传出)

2.所有形参必须是局部作用域的变量,不能再过程执行期间改变。(不能给in模式的参数赋值)

3.所有形参可使用任意有效的sql或pl/sql数据类型

4.所有形参可以有默认的初值

5.任何从sql查询到函数的系统引用游标类型的强制转换都是不可写的,因此必须通过in模式参数进行传递。

 这包括哪些作为显示游标变量传递的以及使用cursor函数的强制转换。


--值传递:调用时接受值的副本,不返回输出变量。 
 --使用值传递过程跨单个事务作用域管理多个DML语句。
 create or replace procedure add_user(
   username varchar2,
   age number,
   address varchar2,
   street_address varchar2
 )  is
 v_id number;
 --声明内部函数(内部pl/sql块) 从指定序列中获得下一个值,使用了本地动态sql
 function get_sequence_value(sequence_name varchar2) return number is
    pragma autonomous_transaction;
    id_value number;
    statement varchar2(2000);
 begin
    statement :='begin'                              ||chr(10)
              ||' select '||sequence_name||'.nextval'||chr(10)
              ||' into :id_value'                    ||chr(10)
              ||' from dual;'                        ||chr(10) 
              ||'end;';   
    execute immediate statement using out id_value;
    return id_value;
  end get_sequence_value;
begin
    savepoint add_user;       --设置保存点
    v_id :=get_sequence_value('SQ_USER');
    insert into tb_user(userid,name,age) values(v_id,username,age);
    if address is not null then
         --向地址表中插入值
         if street_address is not null then
            --向街道表中插入值
          end if;
    end if;
    exception
       when others then
          rollback to add_user;   --回滚到保存点
          raise_application_error(-20001,sqlerrm);  --抛出异常
end add_user;


--引用传递过程


--被调用时接受值的副本,不返回输出变量,可改变实参的值。返回实参引用给调用程序单元。

pl/sql引用传递过程由下列5条规则定义:

1.必须至少有一个形参通过使用out或in out模式定义。

2.所有形参在过程操作中可更改的局部作用域变量。

3.所有形参可使用任意有效的sql或pl/sql数据类型。

4.所有in模式形参可以有默认的初值。

5.任何从sql查询到过程的系统引用游标类型的强制转换都是不可写的,因此必须通过in模式参数进行传递。

 (即作为参数的系统引用游标不能再写入数据,只能是in模式的参数)


--例:引用传递过程
 function get_sequence_value(sequence_name varchar2) return number is
    pragma autonomous_transaction;
    id_value number;
    statement varchar2(2000);
 begin
    statement :='begin'                              ||chr(10)
              ||' select '||sequence_name||'.nextval'||chr(10)
              ||' into :id_value'                    ||chr(10)
              ||' from dual;'                        ||chr(10) 
              ||'end;';   
    execute immediate statement using out id_value;
    return id_value;
  end get_sequence_value;
 create or replace procedure add_user(
   username varchar2,
   age number,
   userid out number,   --输出参数(引用传递)
 )  is
 v_id number;
begin
    savepoint add_user;       --设置保存点
    userid :=get_sequence_value('SQ_USER');  --为输出参数赋值
    insert into tb_user(userid,name,age) values(userid,username,age);
    exception
       when others then
          rollback to add_user;   --回滚到保存点
          raise_application_error(-20001,sqlerrm);  --抛出异常
end add_user;


目录
相关文章
|
16天前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
24 7
|
16天前
|
Oracle 关系型数据库 数据库
oracle数据库技巧
【10月更文挑战第25天】oracle数据库技巧
21 6
|
16天前
|
存储 Oracle 关系型数据库
Oracle数据库优化策略
【10月更文挑战第25天】Oracle数据库优化策略
17 5
|
23天前
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
|
12天前
|
存储 Oracle 关系型数据库
oracle服务器存储过程中调用http
通过配置权限、创建和调用存储过程,您可以在Oracle数据库中使用UTL_HTTP包发起HTTP请求。这使得Oracle存储过程可以与外部HTTP服务进行交互,从而实现更复杂的数据处理和集成。在实际应用中,根据具体需求调整请求类型和错误处理逻辑,以确保系统的稳定性和可靠性。
14 0
|
3月前
|
监控 Oracle 关系型数据库
"深度剖析:Oracle SGA大小调整策略——从组件解析到动态优化,打造高效数据库性能"
【8月更文挑战第9天】在Oracle数据库性能优化中,系统全局区(SGA)的大小调整至关重要。SGA作为一组共享内存区域,直接影响数据库处理能力和响应速度。本文通过问答形式介绍SGA调整策略:包括SGA的组成(如数据缓冲区、共享池等),如何根据负载与物理内存确定初始大小,手动调整SGA的方法(如使用`ALTER SYSTEM`命令),以及利用自动内存管理(AMM)特性实现智能调整。调整过程中需注意监控与测试,确保稳定性和性能。
282 2
|
4月前
|
存储 缓存 Oracle
Oracle数据库可扩展性和性能
【7月更文挑战第6天】
82 7
|
存储 SQL 负载均衡
达梦数据库与Oracle数据库:功能、性能和适用场景对比
数据库在现代信息技术领域中扮演着至关重要的角色。在企业级应用中,选择正确的数据库管理系统对于数据存储、处理和查询效率至关重要。本文将对比两个备受关注的数据库管理系统——达梦数据库和Oracle数据库,从功能、性能和适用场景等方面进行深入探讨,以帮助读者在选择合适数据库时做出明智的决策。
2796 1
|
SQL Oracle 安全
Oracle优化01-引起数据库性能问题的因素
Oracle优化01-引起数据库性能问题的因素
168 0

推荐镜像

更多