精华内容
下载资源
问答
  • mysql基础(48)_存储过程形参类型
    2021-05-21 21:40:03

    存储过程的形参类型

    存储过程也允许提供参数(形参和实参),存储的参数也和函数一样,需要指定其类型。但是存储过程对参数还有额外的要求:自己的参数分类。

    IN
    表示参数从外部传入到里面使用(过程内部使用),可以是直接数据也可以是保存数据的变量。(相当于php函数里面的值传递)

    Out
    表示参数是从过程里面把数据保存到变量中,交给外部使用:传入的必须是变量
    如果说传入的out变量本身在外部有数据,那么在进入过程之后,第一件事就是被清空,设为NULL(相当于php函数里面的引用传递)

    Inout
    数据可以从外部传入到过程内部使用,同时内部操作之后,又会将数据返还给外部。(相当于php函数里面的引用传递)

    参数基本语法(形参)

    过程类型 变量名 数据类型:

    -- 创建三个外部变量
    set @n1 = 1;
    set @n2 = 2;
    set @n3 = 3;

    -- 创建过程
    -- 修改语句结束符
    delimiter $$
    create procedure my_pro3(in int_1 int,out int_2 int,inout int_3 int)
    begin
         -- 查看三个传入进来的数据的值(此时int_2值为NULL,int_1和int_3值分别为1,3)
         select int_1,int_2,int_3;

         -- 修改三个变量的值
         set int_1 = 10;
         set int_2 = 100;
         set int_3 = 1000;

         select int_1,int_2,int_3;       -- 此时变量值全部改变

         -- 查看会话变量
         select @n1,@n2,@n3;       -- 这是外部的值,实参,还是1,2,3不会变

         -- 修改会话变量
         set @n1 = 'a';
         set @n2 = 'b';
         set @n3 = 'c';

         select @n1,@n2,@n3;     -- 在过程内部实参的值都改变了

    end
    $$
    delimiter ;

    -- 调用过程
    call my_pro3(@n1,@n2,@n3);

    -- 在执行过程之后,再次查看会话变量
    select @n1,@n2,@n3;          -- 在过程外部,过程结束最后一刻,根据形参类型有不同的改变,其中@n1为in型,形参值不还给实参@n1,所以为a,而@n2和@n3分别为out型和inout型,过程结束最后一刻会把形参值还给@n2和@n3,所以他们值从b和c又被改变成100和1000

    mysql> -- 创建三个外部变量
    mysql> set @n1 = 1;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> set @n2 = 2;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> set @n3 = 3;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql>
    mysql> -- 创建过程
    mysql> -- 修改语句结束符
    mysql> delimiter $$
    mysql> create procedure my_pro3(in int_1 int,out int_2 int,inout int_3 int)
        -> begin
        ->      -- 查看三个传入进来的数据的值
        ->      select int_1,int_2,int_3;
        ->
        ->      -- 修改三个变量的值
        ->      set int_1 = 10;
        ->      set int_2 = 100;
        ->      set int_3 = 1000;
        ->
        ->      select int_1,int_2,int_3;
        ->
        ->      -- 查看会话变量
        ->      select @n1,@n2,@n3;
        ->
        ->      -- 修改会话变量
        ->      set @n1 = 'a';
        ->      set @n2 = 'b';
        ->      set @n3 = 'c';
        ->
        ->      select @n1,@n2,@n3;
        ->
        -> end
        -> $$
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> delimiter ;
    mysql>
    mysql> -- 调用过程
    mysql> call my_pro3(@n1,@n2,@n3);
    +-------+-------+-------+
    | int_1 | int_2 | int_3 |
    +-------+-------+-------+
    |     1 |  NULL |     3 |
    +-------+-------+-------+
    1 row in set (0.00 sec)
    
    +-------+-------+-------+
    | int_1 | int_2 | int_3 |
    +-------+-------+-------+
    |    10 |   100 |  1000 |
    +-------+-------+-------+
    1 row in set (0.01 sec)
    
    +------+------+------+
    | @n1  | @n2  | @n3  |
    +------+------+------+
    |    1 |    2 |    3 |
    +------+------+------+
    1 row in set (0.01 sec)
    
    +------+------+------+
    | @n1  | @n2  | @n3  |
    +------+------+------+
    | a    | b    | c    |
    +------+------+------+
    1 row in set (0.01 sec)
    
    Query OK, 0 rows affected (0.01 sec)
    
    mysql>
    mysql> -- 在执行过程之后,再次查看会话变量
    mysql> select @n1,@n2,@n3;
    +------+------+------+
    | @n1  | @n2  | @n3  |
    +------+------+------+
    | a    |  100 | 1000 |
    +------+------+------+
    1 row in set (0.00 sec)

    过程分析
    1、当out类型和inout类型数据传入之后:实际上没有改变外部变量的值,而是把值给了形参,但是形参会将out类型的值清楚为NULL
    2、走到end代表过程结束:开始工作,判断变量是否是out或者inout类型。如果是,将内部代替out和inout变量的对应形参的值重新赋值外部变量(会将外部变量本身的值给覆盖)。

    站在过程的视角:
    1、in只负责用形参"读取"实参(在最开始)。
    2、out只负责用形参"写入"实参(在最后做)。
    3、inout两者都做,最开始读,最后写。
     

    更多相关内容
  • -- 存储过程中 in 参数的 使用 DELIMITER ;; CREATE PROCEDURE name_in(IN `time` VARCHAR(50)) BEGIN SELECT NOW() ,`time`; END ;; CALL name_in('现在时间'); -- in 是一个形参 你可以 定义 数据类型 调用存储...
  • 作者:张老师,C语言是一种面向过程的语言,它的程序执行过程是按逻辑顺序执行,函数的函数体的定于位置与程序执行无关,该函数必须程序执行过程中调用才能执行。上图:main函数调用的函数fun(),若main...

    作者:张老师,

    C语言是一种面向过程的语言,它的程序执行过程是按逻辑顺序执行,在函数的函数体的定于位置与程序执行无关,该函数必须在程序执行过程中调用才能执行。

    1186d25964d2e5046ba27c259576b245.png

    上图中:main函数中调用的函数fun(),若在main函数的执行过程中(包括main函数调用的函数内部调用)没有调用fun()函数,则该函数永远不会被执行。

    当调用fun函数时,系统会给形参变量在栈中分配相应的内存空间,即整形变量a,和指针变量p,同时将实参赋值给对应的形参,即使定义了相同的全局变量a或者指针变量p。但他们代表的不是相同的内存空间,所以他们互不影响。

    即如:

    a=10;p=”abc”;

    a=i;p=p;

    当该fun函数结束时,该函数内部所申请分配的空间被释放。

    函数可能在程序中多次调用,因为形参需要用来存储实参对应的值,正是由于实参值具有不确定性,因此不能指定形参的值。函数的参数传递是赋值过程,则形参必须有特定的存储空间才能接受实参的值。在函数的实参只要满足赋值形参的赋值要求都可以。

    正常的运行结果:

    da07d229d65e9f910843d34129848635.png

    若函数形参指定为确定的值而不是对应的变量则源文件编译不能通过。

    展开全文
  • C语言: A.实参和与其对应的形参各占用独立的存储单元关注:90答案:6mip版解决时间 2021-01-27 22:41提问者花开不败2021-01-26 22:07B.实参和与其对应的形参共占用一个存储单元C.只有当实参和与其对应的形参...

    以下正确的说法是( )。在C语言中: A.实参和与其对应的形参各占用独立的存储单元

    关注:90  答案:6  mip版

    解决时间 2021-01-27 22:41

    e6cb1a03ad541b3098697807b7bf1798.png

    提问者花开不败

    2021-01-26 22:07

    B.实参和与其对应的形参共占用一个存储单元

    C.只有当实参和与其对应的形参同名时才共占用存储单元

    D.形参是虚拟的,不占用存储单元

    最佳答案

    e6cb1a03ad541b3098697807b7bf1798.png

    二级知识专家你的偏见

    2021-01-26 22:54

    选A。

    函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。

    形参只是实参的一个副本,即拷贝,它们不能公用存储单元,不占相同的空间。

    全部回答

    e6cb1a03ad541b3098697807b7bf1798.png

    1楼在時光深處躲貓貓

    2021-01-27 01:51

    没错 是D 当变量名为函数参数,函数调用时形参是虚拟的,不占用存储单元

    e6cb1a03ad541b3098697807b7bf1798.png

    2楼幼稚园小班大佬

    2021-01-27 01:13

    .C语言程序一般由若干个函数构成,程序中应至少包含一个________min 函数_,其名称只能为____主函数_____

    e6cb1a03ad541b3098697807b7bf1798.png

    3楼风是甜的

    2021-01-27 00:43

    答案:a. 在c语言中,实参与其对应的形参各占独立的存储单元;

    e6cb1a03ad541b3098697807b7bf1798.png

    4楼酒空人散

    2021-01-27 00:20

    在C语言中实参和与其对应的形参共占用一个存储单元。

    C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。

    C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括一些类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。

    扩展资料

    基本特性

    1、高级语言:它是把高级语言的基本结构和语句与低级语言的实用性结合起来的工作单元。

    2、结构式语言:结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。

    C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。

    3、代码级别的跨平台:由于标准的存在,使得几乎同样的C代码可用于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。C语言对编写需要进行硬件操作的场合,优于其它高级语言。

    4、使用指针:可以直接进行靠近硬件的操作,但是C的指针操作不做保护,也给它带来了很多不安全的因素。C++在这方面做了改进,在保留了指针操作的同时又增强了安全性,受到了一些用户的支持,但是,由于这些改进增加语言的复杂度,也为另一部分所诟病。

    Java则吸取了C++的教训,取消了指针操作,也取消了C++改进中一些备受争议的地方,在安全性和适合性方面均取得良好的效果,但其本身解释在虚拟机中运行,运行效率低于C++/C。一般而言,C,C++,java被视为同一系的语言,它们长期占据着程序使用榜的前三名。

    参考资料来源:百度百科-c语言

    e6cb1a03ad541b3098697807b7bf1798.png

    5楼落爺英雄遲暮

    2021-01-27 00:15

    参数之间的传递分为数值传递与地址传递,如果是数值传递时,各自占用不同的内存单元,如果是地址传递时,共用同一段内存单元。

    我要举报

    如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

    →点此我要举报以上信息!←

    推荐资讯

    大家都在看

    展开全文
  • 【PLSQL】过程procedure的形参和实参

    千次阅读 2015-03-12 12:43:39
    in: 缺省模式,在过程的内部形参是只读的; out;过程内部,形参可以读可以写入;调用过程中,任何的实参将被忽略,即值不会赋给形参过程执行完成后,当前值赋给对应的实参; in out:调用过程中,实参的值赋给...

    ************************************************************************
      ****原文:blog.csdn.net/clark_xu 徐长亮的专栏
    ************************************************************************

    1.1 过程procedure

    语法:    

             create or replace procedure proc_name

    [(arg_name{in | out | in out} type, …)

    ]

    {is | as }

              <local variable declareation>

             begin

                       <executable statements>

             exception

                       <exception handlers>

             end;

            

    创建存储过程例子:

             create or replace procedure account_number

             ls

              v_cnt binary_interger;

             begin

              select count(id) into v_cnt from account;

              dbms_output.put_line(‘account number is’ || v_cnt);

             end;

    1.1.1  调用存储过程

    sql工作表中直接调用:

             exec account_number;

    1.1.2  存储过程的参数

    例如:

             create or replace procedure proc1

             (p_c1 varchar2,p_c2 out varchar2,p_c3 in out varchar2)

             ls

              v_c1 varchar(10);

             begin

          --p_c1 :=p_c1 || ‘d’; --不能做复制的目标

                       v_c1:=P_c1;

                       p_c2 :=p_c1 || ‘d’;

                       p_c3”=p_c3||’d’;

             end;

    调用为:

             exec  proc1 (‘abc’,’abc’,’abc’);保存

    调用:

             declare

                       v_c2 varchar2(10) :=’abc’

                       v_c33 varchar2(20) :=’abc’;

             begin

                       proc1(‘abc’,v_c2,v_c3);

                       dbms_output.put_line(v_c2);

                       dbms_outpurt.put_line(v_c3);

             end;

            

    1.1.3  形参和实参

    创建存储过程中的参数为形参:

             create or replace procedure proc1

             (p_c1 varchar2,p_c2 out varchar2,p_c3 in out varchar2)

             ls

              v_c1 varchar(10);

             v_c1为过程中的局部变量

    调用时候括号内的参数为实参

             proc1(‘abc’,v_c2,v_c3);

    形参的种类:

             in: 缺省模式,在过程的内部形参是只读的;

             out;过程内部,形参可以读可以写入;调用过程中,任何的实参将被忽略,即值不会赋给形参;过程执行完成后,当前值赋给对应的实参;

             in out:调用过程中,实参的值赋给对应的形参,过程内部,可以读,可以写;过程执行结束后,控制返回给控制环境,形参内存赋给调用时候的实参;

    对实参的要求:

             模式为In的形参对应的实参,可以是常量和变量

             某省为IN outOUT的形参对应的实际参数必须是变量;用于存储返回的值;

    形参的限制:

    形参不能声明长度,但是可以使用%TYPE来进行限制

    3.1.4 带参数的过程调用

    位置表示法:

             --调用的添加所有参数,实参和形参按照顺序一一对应

    名字表示法:

             --调用时给出形参名字,并给出实参,例如

             procname(12,p_outparm +> v_var1,p_inout =) 10)

    两种方法可以混合用:

             混用的时候,第一个参数必须按照位置类指定;

             当参数很多的时候,提供程序可读性,用名字表示法;

    3.1.5使用缺省参数

    形参可以指明缺省值

             parm_name [mode] type {:=|default} int_value;

    位置指示法是,所有缺省的值都放在最后面;

    声明时,如果有缺省值,尽量将缺省值放在参数表的末尾;

    3.1.6 存储过程的DDL语句

    在过程中执行DDL操作,所需的权限必须通过直接授予的方式,不能通过角色授予;

    调用过程时候,所有角色都是disable的,即角色所包含的所有权限都不能生效;

    调用其他用户的过程,必须有过程的属主赋予执行权限

             grant execut on procname to userame;

             create procedure proc1

             ls

             begin

              execute immediate ‘create table test100(c1 number)’;

    end;

    ************************************************************************
      ****原文:blog.csdn.net/clark_xu 徐长亮的专栏
    ************************************************************************
    展开全文
  • 相关问题函数,函数,形参,程序,运行,速度,函数,,变量,形参,变量,形参,时,存储,空间,,说法,形参,实参,结构,数组,名,形参,结构,指针,地址,实参,形参,形参,对象,数据,类型,形参,错,声明,形式,函数,类型,运算符,形参,...
  • 这个过程中,我们大多会给这个函数传递某些‘参数’,当我们定义被调用函数时,函数名后的括号( )即为我们传入的“形参”,函数可以函数体描述如何操作这些“形参”;同时,我们调用函数时,例如 fun(param1...
  • C语言函数的形参与实参是什么?

    千次阅读 2021-03-07 18:29:35
    函数的参数分为形参和实参两种形参出现:1、函数定义整个函数体内都可以使用,离开该函数则不能使用。2、实参出现主调函数,进入被调函数后,实参变量也不能使用。数据传送是形参和实参的主要功能。...
  • 直接看例子: DELIMITER $$CREATE DEFINER=`root`@`127.0.0.1` PROCEDURE `restore`(username varchar(50))BEGINif username is not null then update user set invalid=0 and activate_time='0000-00-00 00:00:00'...
  • c语言的形参是否占存储单元

    千次阅读 2020-12-24 22:28:59
    展开全部C。函数的形参是函数定义时由用户定义的形式上的变量,实参32313133353236313431303231363533e78988e69d8331333431353433是函数调用时,主调...函数调用结束返回主调函数后则不能再使用形参变量。实参和其...
  • 今天阅读了一个写的非常棒的博文,通过此博文再次复习了Java参数传递的知识(即值传递与引用...一、基本类型与引用类型内存的保存内容Java的变量分为基本类型和引用类型两种。基本类型的变量保存数值本身,...
  • 在上一篇文章提到了Python函数的定义和使用这篇文章里我们来讨论下关于函数的一些更深的话题。学习C语言函数的时候,遇到的问题主要有形参实参的区别、参数的传递和改变、变量的作用域。同样Python,...
  • ◆命名块:具有名称的PL/SQL块,这些命名块被存储在Oracle,编译一次,以后只可调用就可多次执行。如:存储过程存储函数、包、触发器等、存储过程:无返回值;存储函数:有返回值;包:可容纳多个过程或函数的...
  • 存储过程怎么使用

    千次阅读 2021-05-08 22:38:30
    简化对变动的管理,如果表名列名或者业务逻辑发生变化,只需要改变存储过程中的代码,使用它的人甚至不需要知道这些变化。通过对存储过程限制对基础数据的访问,减少数据讹误的机会(讹误是指无意识或别的原因所导致...
  • 展开全部C语言实参和与其对应的形参共占用一个存储单元。C语言是一门面向过程、抽象化的32313133353236313431303231363533e58685e5aeb931333431353363通用程序设计语言,广泛应用于底层开发。C语言能以简易的...
  • /*带输入输出参数存储过程*/ ALTER PROCEDURE pro_test2 @userID INT, @maxUserID INT OUTPUT, @countUser INT OUTPUT AS BEGIN SELECT * FROM dbo.SY_ADMIN WHERE UserID=@userID --10075 SELECT @maxUser
  • 个人也很好奇不定量形参使用以及实现方法,不定形参在最近个人的使用中也比较常见,比如格式化输出,就测试了一下,说点粗陋的发现。 测试环境 测试基于window10环境,使用的编译器是VS2019,
  • 形参和实参的储存单元是否一致?

    千次阅读 2021-11-27 11:21:40
    实参和形参是各占独立存储空问,函数调用过程中,实参向形参拷贝复制值。实参是个变量,形参 也是个变量。如果占用同一片空间的话,编译时候就不存在实参形参类型不匹配的报错参数传递形参值的改变不影响实参的...
  • 如果我们写一段程序的时候,需要多次用到同样的一个功能,如果每次都要重复写相同的代码,不仅会增加我们的代码量,更会让我们写出的代码让别人看起来觉得很low,而如果我们把功能作为一个代码块封装一个函数里...
  • 摘要:壁附面上面煤工作工作近C槽.回风顺偶角,语言程用函容易面最工作积聚的地点是瓦斯回...被保突出层C护层,序而先煤层削弱相邻叫(的突地压的煤除或出或冲击层或为消危险开采矿层。直接顶板底版顶D顶.伪,当调...
  • 数据库存储过程

    2021-11-20 21:47:38
    之前介绍了 数据库基本常识的简介及mysql安装 结构化查询语言sql 数据库表介绍 数据库的数据类型 数据操作语言DML——数据的增删改查 数据库对象操作语言DDL...接下来介绍最后一个存储过程。当然,数据库的东西还
  • const形参和实参

    2021-05-22 01:39:30
    形参是const时,必须要注意关于顶层const的讨论。如前所述,顶层const的作用于对象本身:const int ci=42; //不能改变ci,const是顶层的int i=ci; //正确:当拷贝ci时,忽略了它的顶层constint *const p=&i; ...
  • 参数传递,是程序运行过程中,实际参数就会将参数值传递给相应的形式参数,然后函数实现对数据处理和返回的过程。参数传递有3种方式: 值传递 地址传递 引用传递 tips: 被调用函数的形参只有函数被调用时...
  • 【单选题】关于函数参数传递,形参与实参的描述错误的是( )。【单选题】关于函数的下列说法不正确的是:【判断题】Python内置函数sum____用来返回数值型序列所有元素之和。【判断题】Python内置函数min____用来...
  • 今天,传智播客郑州校区就为大家介绍Python函数形参与实参。一、传智播客Python学习:函数1.1函数的定义使用def关键字,如下:def user():def 关键字后面加函数名定义函数,定义以冒号结尾...
  • 一般来说,C/C++,我们说交换某2个变量的值,需要保证变量对应的内存地址不要变动,值变动即可。 但其他语言(如Python)不研究指针相关的内容,只关心值是否变动即可,内存很少研究,我们也看看其工作原理。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,130
精华内容 25,652
关键字:

在存储过程的形参中使用