PL SQL中实际参数和形式参数的区别

PL/SQL是Oracle数据库中一种面向对象的编程语言,引入了实际参数和形式参数的概念。

实际参数是传递给函数或过程的实际值。形式参数是在函数或过程定义中声明的参数。在函数或过程的调用过程中,实际参数的值会被复制到形式参数中。接下来,我们将详细介绍实际参数和形式参数的区别。

  1. 值传递和引用传递

PL/SQL中的实际参数和形式参数的区别在于它们进行参数传递的方式。PL/SQL中的参数传递方式分为值传递和引用传递两种方式。对于值传递方式,实参变量的值被复制到形参变量中,对形参的修改不会影响实参的值;而对于引用传递方式,实参变量的地址被复制到形参变量中,对形参的修改会影响实参的值。

下面是一个使用值传递方式的例子:

CREATE OR REPLACE PROCEDURE proc_value(p_num1 NUMBER, p_num2 NUMBER) IS
BEGIN
  DBMS_OUTPUT.PUT_LINE('p_num1 = ' || p_num1);
  DBMS_OUTPUT.PUT_LINE('p_num2 = ' || p_num2);
  p_num1 := p_num1 * 2;  -- 修改p_num1的值
  p_num2 := p_num2 * 2;  -- 修改p_num2的值
END;
/

DECLARE
  v_num1 NUMBER := 10;
  v_num2 NUMBER := 20;
BEGIN
  proc_value(v_num1, v_num2);
  DBMS_OUTPUT.PUT_LINE('v_num1 = ' || v_num1);
  DBMS_OUTPUT.PUT_LINE('v_num2 = ' || v_num2);
END;
/

运行结果为:

p_num1 = 10
p_num2 = 20
v_num1 = 10
v_num2 = 20

可以看到,在proc_value过程中对p_num1和p_num2的修改不会影响v_num1和v_num2的值,这是因为p_num1和p_num2的值是被复制到了函数中的形式参数中。

下面是一个使用引用传递方式的例子:

CREATE OR REPLACE PROCEDURE proc_ref(p_num1 IN OUT NUMBER, p_num2 IN OUT NUMBER) IS
BEGIN
  DBMS_OUTPUT.PUT_LINE('p_num1 = ' || p_num1);
  DBMS_OUTPUT.PUT_LINE('p_num2 = ' || p_num2);
  p_num1 := p_num1 * 2;  -- 修改p_num1的值
  p_num2 := p_num2 * 2;  -- 修改p_num2的值
END;
/

DECLARE
  v_num1 NUMBER := 10;
  v_num2 NUMBER := 20;
BEGIN
  proc_ref(v_num1, v_num2);
  DBMS_OUTPUT.PUT_LINE('v_num1 = ' || v_num1);
  DBMS_OUTPUT.PUT_LINE('v_num2 = ' || v_num2);
END;
/

运行结果为:

p_num1 = 10
p_num2 = 20
v_num1 = 20
v_num2 = 40

可以看到,在proc_ref过程中对p_num1和p_num2的修改影响了v_num1和v_num2的值,这是因为p_num1和p_num2的地址是被复制到了函数中的形式参数中。

  1. 不同作用域

实际参数和形式参数的另一个区别是它们的作用域不同。在PL/SQL中,实参的作用域在调用函数或过程时才会存在,而形参的作用域只存在于函数或过程中。

下面是一个使用实参作用域的例子:

CREATE OR REPLACE FUNCTION func_scope(p_num NUMBER) RETURN NUMBER IS
  v_result NUMBER;
BEGIN
  v_result := p_num * 2;  -- 计算结果
  RETURN v_result;
END;
/

DECLARE
  v_num NUMBER := 10;
BEGIN
  -- 计算v_num的两倍
  DBMS_OUTPUT.PUT_LINE('v_num的两倍 = ' || func_scope(v_num));
  v_num := 20;  -- 修改v_num的值
END;
/

运行结果为:

v_num的两倍 = 20

可以看到,在调用函数func_scope前,v_num的值是10,调用函数时才会存在实参p_num的作用域。而在函数执行完毕之后,v_num的值被修改为20,函数返回的结果不受影响。

综上所述,PL/SQL中的实际参数和形式参数的区别主要体现在参数传递方式和作用域上。在编写PL/SQL程序时,需要根据实际需要选择合适的参数传递方式和变量作用域,以达到最优的编程效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PL SQL中实际参数和形式参数的区别 - Python技术站

(0)
上一篇 2023年3月27日
下一篇 2023年3月27日

相关文章

  • CentOS7.4下MySQL5.7.28二进制方式安装的方法步骤

    接下来我将为你详细讲解“CentOS7.4下MySQL5.7.28二进制方式安装的方法步骤”的完整攻略。 环境准备 在开始安装MySQL之前,我们需要先进行环境准备。具体步骤如下: 确保CentOS7.4已经安装,并且处于最新状态。可以使用以下命令进行操作: sudo yum update -y 安装必要的依赖。在CentOS7.4上,可以使用以下命令安装:…

    database 2023年5月22日
    00
  • MySql_十六进制值

    十六进制值 MySQL支持十六进制值。在数字上下文中,十六进制数如同整数(64位精度)。在字符串上下文,如同二进制字符串,每对十六进制数字被转换为一个字符: mysql> SELECT x’4D7953514C’; -> ‘MySQL’ mysql> SELECT 0xa+0; -> 10 mysql> SELECT 0x506…

    MySQL 2023年4月13日
    00
  • Node.js数据库操作之连接MySQL数据库(一)

    下面是“Node.js数据库操作之连接MySQL数据库(一)”的完整攻略: 连接MySQL数据库 安装MySQL 首先需要下载并安装MySQL,可以从官网或镜像站点中下载。安装完成后,需要设置root用户的密码。 安装mysql模块 接下来需要安装npm的mysql模块,可以使用npm命令进行安装: $ npm install mysql 连接MySQL c…

    database 2023年5月18日
    00
  • Linux – mysql 异常:登录不上mysql数据库

    问题描述 重启虚拟机之后,用命令 mysql -u root -p 登录不上 mysql 数据库,页面显示: 但是,用命令 service mysqld status 可以查看状态   解决方案 1、查看 mysql 相关的 pid 命令:ps -ef|grep mysql   2、杀死相关进程 kill -9 2568 kill -9 2454   3、重…

    MySQL 2023年4月13日
    00
  • 虚拟机linux端mysql数据库无法远程访问的解决办法

    如何解决虚拟机Linux端MySQL数据库无法远程访问的问题 一、问题背景 在使用Linux虚拟机中的MySQL数据库时,有时候需要通过远程连接的方式进行数据库操作,但是在进行远程连接时,会出现连接被拒绝的情况。这可能是由于数据库未开启远程访问或者端口未开放等问题导致的。 二、解决步骤 查看MySQL的监听端口 在终端中输入如下命令查看MySQL监听的端口号…

    database 2023年5月22日
    00
  • mysql database manual(mysql数据库手册)

    MySQL是一种常用的关系型数据库管理系统,它有很多功能和应用,而MySQL数据库手册包含了MySQL的完整文档,其中包括了MySQL的安装、基本语法、高级特性、存储引擎等方面。下面是关于MySQL数据库手册的一个完整攻略。 1. MySQL数据库手册的获取方式 MySQL数据库手册可以从MySQL官方网站下载获取。你可以打开官方网站,选择下载页面,找到“D…

    database 2023年5月19日
    00
  • 用Redis实现分布式锁以及redission使用

    原文:https://my.oschina.net/wangnian/blog/668830     前言:分布式环境有很多问题,比如你前一个请求访问的是服务器A,第二个请求访问到了服务器B,就会发生并发重复插入问题,这个时候需要依赖单点来实现分布锁,而redis就是。 先导入maven依赖  redission <dependency>    …

    Redis 2023年4月11日
    00
  • 在SQL Server和Oracle中创建job

    创建Job是数据库管理员和开发人员必须掌握的技能之一,下面我将详细讲解如何在SQL Server和Oracle中创建Job。 在SQL Server中创建Job 步骤1:打开SQL Server Management Studio 首先,打开SQL Server Management Studio并连接到需要创建Job的数据库实例。 步骤2:新建Job 在S…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部