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

yizhihongxing

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日

相关文章

  • docker-compose创建网桥,添加子网,删除网卡的实现

    创建网桥 Docker-Compose 是 Docker 专门用于多容器 Docker 应用程序的工具。利用 Docker-Compose 创建 Docker 应用程序可以轻松快速搭建容器间的互联环境。 在 Docker-Compose 中,可以创建网桥,即 Docker 网络模型中的 bridge 模式,来实现容器之间的通信。具体步骤如下: 创建一个 do…

    database 2023年5月22日
    00
  • MySQL解决字符集编码问题

    MySQL作为一款流行的关系型数据库管理系统,常常面临着支持多种语言和字符集编码的需求。如果不正确地处理字符集编码,就会导致各种各样的问题,如乱码、显示异常等。本攻略将详细讲解如何在MySQL中解决字符集编码问题。 1. 确定字符集编码 首先,我们需要确定数据库、数据表和数据列的字符集编码。MySQL支持多种字符集编码,例如UTF-8、GBK、GB2312等…

    database 2023年5月18日
    00
  • MySQL UNION操作符基础知识点

    当我们需要从两个或多个表中获取数据时,MySQL提供了Union操作符,可以用于合并两个或多个SELECT语句的结果集,且不会显示重复的行。在本文中,我们将介绍MySQL Union操作符的基础知识点,包括其语法、用法和示例。 语法 Union操作符的语法如下: SELECT column_name(s) FROM table1 UNION SELECT c…

    database 2023年5月22日
    00
  • SQL Server 2008登录错误:无法连接到(local)解决方法

    下面是详细的SQL Server 2008登录错误无法连接到(local)解决方法攻略: 1. 确认SQL Server服务是否启动 首先,需要确认SQL Server服务是否启动。可以通过以下步骤确认: 打开Windows服务管理器:在Windows系统中,可以通过开始菜单或运行程序中输入“services.msc”打开服务管理器; 在服务管理器中查找“S…

    database 2023年5月18日
    00
  • MySQL中Replace语句用法实例详解

    下面我就详细讲解一下“MySQL中Replace语句用法实例详解”的攻略。 什么是Replace语句 Replace语句是用于替换/更新表中数据的MySQL命令。该命令可以替换掉已有的记录,如果记录不存在,则会插入一条新记录。语法如下: REPLACE [LOW_PRIORITY | DELAYED] [INTO] table_name [(col_name…

    database 2023年5月22日
    00
  • 关于linux(ubuntu 18.04) 中idea操作数据库失败的问题

    关于Linux (Ubuntu 18.04) 中 IntelliJ IDEA 操作数据库失败的问题,可以按照以下步骤进行排查和解决: 确认数据库服务是否开启 使用 IntelliJ IDEA 连接数据库前,需要先确保数据库服务已经开启。以 MySQL 数据库为例,在终端中执行以下命令查看 MySQL 服务是否已经启动: sudo systemctl stat…

    database 2023年5月19日
    00
  • Java Web开发之信息查询方式总结

    Java Web 开发之信息查询方式总结 为什么需要信息查询方式总结 在 Java Web 开发中,信息查询功能一直都是必不可少的一部分。例如,在一个电商网站中,用户可以通过搜索框输入关键词查找商品;在一个博客网站中,用户可以通过分类、标签、搜索等方式查找文章。因此,掌握信息查询的方式和技巧对于开发人员来说是非常重要的。 信息查询方式包括但不限于 SQL 查…

    database 2023年5月21日
    00
  • centos7.2离线安装mysql5.7.18.tar.gz

    CertOS 7.2离线安装MySQL5.7.18.tar.gz的操作步骤如下: 准备工作 下载MySQL5.7.18源码包,并将其上传到CentOS机器中。 安装gcc、make等编译工具:使用以下命令行命令即可安装。 yum install -y gcc gcc-c++ make cmake 安装依赖库:使用以下命令行命令即可安装。 yum instal…

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