精华内容
下载资源
问答
  • mysql存储过程传递参数
    千次阅读
    2022-02-15 14:05:45

    in 表示传入的参数

    ( in 参数名1 参数类型,in 参数名2 参数类型,....)
    
    delimiter  $
    create  procedure  func(in id int)
    begin
        select * from 表 where Id = id;--查询Id=id的信息
    end $
    delimiter;
     
    call func(101);--调用

    out 表示从内部传值给调用者

    ( out  参数名1 参数类型,in 参数名2 参数类型,....)
    delimiter  $
    --传入id,查询返回name
    create  procedure  func(in id int,out name varchar(20))
    begin
        select ename into name from 表 where Id = id;--查询Id=id的ename,并将值赋给name
    end $
    delimiter;
     
    call func(101,@name);--调用
    select @name;

    inout 综合了上面2种特性

    ( inout  参数名1 参数类型,in 参数名2 参数类型,....)
    delimiter  $
    create  procedure  func(in num int)
    begin
        set num = num * 10;
    end $
    delimiter;
     
    set @inout_num = 2;
    call func(@inout_num);
    select @inout_num;

    更多相关内容
  • 主要介绍了oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包等相关资料,需要的朋友可以参考下
  • MySQL 存储过程参数有三种类型:in、out、inout。它们各有什么作用和特点呢? 一、MySQL 存储过程参数(in) MySQL 存储过程 “in” 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数...
  • 1.SQL递归 在SQL Server中,我们可以利用表表达式来实现递归算法,一般用于阻止机构的加载及相关性处理。 –>实现: 假设OrganiseUnit(组织机构表)中主要的三个字段为OrganiseUnitID(组织机构主键ID)、...
  • plsql 储存过程 参数传递方式

    千次阅读 2019-07-22 21:02:00
    /* 存储过程 一.oracel存储过程 1、没有返回值 return 值;...参数传递方式 1. 按位置传递 2. 按名字传递 3.混合传递 --按照位置传递,再按照名字传递 */ select * from emp; ca...
    /*
     存储过程
      一.oracel存储过程
        1、没有返回值 return 值;
        2、用输出参数来代替返回值;
        3、输出参数可以有多个
      
      二.参数的传递方式
       1. 按位置传递
       2. 按名字传递
       3.混合传递  --按照位置传递,再按照名字传递
    
    */
    
      select * from emp;
      call re4(3,4);
      
      
    create or replace procedure re6 (
      id1 in number,
      id2 in number,
      name1  in emp.ename%type,
      name2  in emp.ename%type,
      n1 out number  -- 需要返回一个参数么? 
    )
    as
    begin
      insert into emp (empno,ename,sal) values (id1,name1,5000);
      insert into emp (empno,ename,sal) values (id2,name2,5000);
      commit;
      select count(*) into n1 from emp;
    end;
    
    declare 
     v_count number(2);-- oracle 没有返回值  用输出参数来定义。
    begin
     re6(1,2,'haha','xixi',v_count);
     dbms_output.put_line('总记录数'||v_count);
    end;
    
    -- 1. 按位置传递
    declare
      v_count number(2);
    begin 
      re6(3,4,'jiji','baba',v_count);  -- 1. 按位置传递
      dbms_output.put_line(v_count);
    end;
    
    
    -- 2.名字传递参数  无序
    declare
       v_count number(2);
    begin                               -- 2.名字传递参数  无序
        re6(name1=>'张三',name2=>'李四',id1=>8,id2=>9, n1=>v_count);
       dbms_output.put_line(v_count);
    end;
    select *from emp;
    call re4(1,2);
    call re4(3,4);
    
    
    -- 混合传递
    declare
      v_count number(2);
    begin
      re6(1,2,name1=>'狼王',name2=>'兔子',n1=>v_count);  --按照位置传递,再按照名字传递
      dbms_output.put_line('总数量:'||v_count);
    end;
    
    
    select * from emp;

     

    转载于:https://www.cnblogs.com/ZXF6/p/11228377.html

    展开全文
  • 本篇文章是对mysql存储过程中表名使用参数传入进行了详细的分析介绍,需要的朋友参考下
  • 如上所示,参数是一个int数组,Mybatis提供了对调用存储过程的支持,那么PostgreSQL独有的数组类型作为存储过程参数又将如何处理呢?其实很简单,mybatis提供了typeHandlers可以创建一个数组类型的类型处理器,...
  • 存储过程:create procedure Pro_GetUserInfo(in szEmpName varchar(1000))-> begin-> declare strSql varchar(1000);-> set strSql = concat('insert into TmpTable_UserInfo(EmpName,PcName,IP) select ...

    存储过程:

    create procedure Pro_GetUserInfo(in szEmpName varchar(1000))

    -> begin

    -> declare strSql varchar(1000);

    -> set strSql = concat('insert into TmpTable_UserInfo(EmpName,PcName,IP) select EmpName,PcName,IP from T_SC_UserManager where EmpName in (', szEmpName, ')');

    -> drop table if exists TmpTable_UserInfo;

    -> create temporary table TmpTable_UserInfo(EmpName varchar(32) not null, PcName varchar(32) not null, IP varchar(32) not null);

    -> set @sql1 = strSql;

    -> prepare stmt_p from @sql1;

    -> execute stmt_p;

    -> end

    ->

    调用:

    call Pro_GetUserInfo("'172.16.10.2','172.16.10.21'"); // 参数用双引号,其实用单引号也行,但是如果参数里有引号就乱套了

    下面的方法不行:

    create procedure Pro_GetUserInfo(in szEmpName varchar(1000))

    -> begin

    -> drop table if exists TmpTable_UserInfo;

    -> create temporary table TmpTable_UserInfo(EmpName varchar(32) not null, PcName varchar(32) not null, IP varchar(20) not null);

    -> insert into TmpTable_UserInfo(EmpName, PcName, IP) select EmpName, PcName, IP from T_SC_UserManager where EmpName in(szEmpName); // 不能直接传进来,如果直接传进来,展开为in("'172.16.10.2','172.16.10.21'"),带着双引号     -> end     ->

    展开全文
  • MySQL的存储过程——参数传递

    什么是存储过程

    1、mysql5.0开始支持存储过程

    2、存储过程就是一组sql语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于Java语言中的方法

    3、存储过程就数据sql语言层面的代码封装与重用

    存储过程的特性

    1、有输入输出参数,可以声明变量,有if/else,case ,while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能

    2、函数的普通特性:模块化,封装,代码复用

    3、速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤。

    格式:

    delimiter 自定义结束符号
    
    create procedure 存储名( [in ,out ,inout] 参数名 数据类型...)
    
    begin
    
    sql 语句
    
    end 自定义的结束符号
    
    delimiter;
    
    DELIMITER $$
    
    CREATE PROCEDURE pro1()
    
    BEGIN
    
    SELECT NAME,age FROM emp2;
    
    END $$
    
    DELIMITER;
    
    CALL pro1(); ——调用存储过程

    1、局部变量(用户自定义,在begin/end块中有效)

    语法:declare var_name type[default var_value];
    
    举例:declare nickname varchar(32);
    
    DELIMITER $$
    
    CREATE PROCEDURE pro3()
    
    BEGIN
    
    DECLARE var_name VARCHAR(32) DEFAULT 'aaa';
    
    SET var_name='张三';
    
    #select var_name;
    
    SELECT NAME,age FROM emp2
    
    WHERE NAME=var_name;
    
    END $$
    
    DELIMITER;
    
    CALL pro3();
    
    还可以使用select...into 语句为变量赋值,基本语法如下:
    
    select col_name [...] into var_name[...] from table_name where condition
    
    当将查询结果赋值给变量时,该查询语句返回结果只能是单行单列。

    2、用户变量(当前会话有效,类比java的成员变量)

    语法:@var_name 不需要提前声明,使用即声明
    
    DELIMITER $$
    
    CREATE PROCEDURE proc6()
    
    BEGIN
    
    SET @var_name='张三';
    
    SELECT @var_name;
    
    END $$
    
    delimiter;
    
    CALL proc6()
    
    SELECT @var_name ——在begin外也可以使用

    3、系统变量

    1、系统变量分为全局变量和会话变量

    2、全局变量在mysql启动时由服务器自动初始化为默认值,可以通过my.ini这个文件来更改

    3、会话变量在新建连接时,由mysql来初始化,会将全局变量复制一份,作为会话变量,没进行修改的话,所有值是跟全局变量一样的

    4、会话变量修改只影响当前连接会话,全局变量会影响整个服务器

    5、有些可以利用语句进行动态修改,有些系统变量的值是只读的,对于那些可以修改的系统变量,我们可以用set进行更改。

    语法@@global.var_name(全局变量)
    
    show global variables; ——查看全局变量
    
    select @@global.auto_incerment_increment; ——查看某全局变量
    
    set global sort_buffer_size=40000; ——初始化或修改全局变量的值
    
    set @@global.sort_buffer_size =30000; ——初始化或修改全局变量的值(为32768,不能小于这个值)
    
    语法@@session.var_name(会话变量)
    
    show session variables; ——查看会话变量
    
    select @@session.auto_incerment_increment; ——查看某会话变量
    
    set session sort_buffer_size=40000; ——初始化或修改会话变量的值
    
    set @@session.sort_buffer_size =30000; ——初始化或修改会话变量的值(为32768,不能小于这个值)

    存储过程传参

    1、(in,可以传多个参数)(in param1 varchar(20),in param2 int ...)

    in表示传入的参数,可以传入数值或者变量,即使传入变量,并不会更改变量的值,可以内部更改,仅仅作用在函数范围内。

    --输入员工的工号,返回员工的信息
    
    delemiter $$
    
    create procedure dec_param(in param_empno varchar(20))
    
    begin
    
    select * from emp where empno=param_empno;
    
    end $$
    
    delimiter ;
    
    call dec_param('1001');

    2、(out)

    表示从存储过程内部传值给调用者

    --传入员工的编号,返回员工的姓名(返回单个值)
    
    delimiter $$
    
    create procedure proc(in empno int ,out out_name varchar())
    
    begin
    
    select ename into out_name from emp where emp.empno=empno;
    
    end $$
    
    delimiter;
    
    call proc(1001,@o_ename);
    
    select @o_ename;
    
    传入员工的编号,返回员工的姓名和薪资(返回多个值)
    
    delimiter $$
    
    create procedure proc(in empno int ,out out_name varchar(),out out_sal decimal(7,2))
    
    begin
    
    select ename,sal
    
    into out_name,out_sal
    
    from emp where emp.empno=empno;
    
    end $$
    
    delimiter;
    
    call proc(1001,@o_ename,@o_sal);
    
    select @o_ename,@o_sal;

    3、inout

    inout表示从外部传入的参数经过修改后可以返回的变量,既可以使用传入的值也可以修改变量的值(即使函数执行完)

    --传入员工名,拼接部门号,传入薪资,求出年薪
    
    delimiter $$
    
    create procedure proc(inout inout_ename varchar(50),inout inout_sal int)
    
    begin
    
    select concat(deptno,"_",inout_ename) into inout_ename from emp where ename=inout_ename;
    
    set inout_sal=inout_sal*12;
    
    end $$
    
    delimiter;
    
    set @inout_ename='关羽';
    
    set @inout_sal=3000;
    
    call proc(@inout_ename,@inout_sal );
    
    select @inout_ename;
    
    select @inout_sal;

    展开全文
  • 需要向存储过程传递字符串,今天看了下SQL Server 2008的新特性,发现有表变量的使用,及其将DataTable作为参数的用法,下面与大家分享下
  • 在2008之前如果我们想要将表作为输入参数传递给SQL Server存储过程使比较困难的,可能需要很多的逻辑处理将这些表数据作为字符串或者XML传入。 在2008中提供了表值参数。使用表值参数,可以不必创建临时表或许多参数...
  • IN参数只用来向过程传递信息,为默认值。 -- 存储过程中 in 参数的 使用 DELIMITER ;; CREATE PROCEDURE name_in(IN `time` VARCHAR(50)) BEGIN SELECT NOW() ,`time`; END ;; CALL name_in('现在时间'); -- in 是...
  • 参数传递,是在程序运行过程中,实际参数就会将参数值传递给相应的形式参数,然后在函数中实现对数据处理和返回的过程,方法有3种方式值传递地址传递引用传递tips:被调用函数的形参只有函数被调用时才会临时分配存储...
  • MySQL 存储过程参数

    千次阅读 2021-01-18 19:14:57
    MySQL 存储过程参数MySQL存储过程参数简介在现实应用中,开发的存储过程几乎都需要参数。这些参数使存储过程更加灵活和有用。 在MySQL中,参数有三种模式:IN,OUT或INOUT。IN- 是默认模式。在存储过程中定义IN参数...
  • 如何将整数数组传递存储过程
  • MySQL存储过程单参数或多参数传递

    千次阅读 2018-10-03 09:35:54
    MySQL开发的存储过程几乎都需要参数。这些参数使存储过程更加灵活和有用。 在MySQL中,参数有三种模式:IN,OUT或INOUT。 1,单参数 in DELIMITER $$USE dc3688$$CREATE PROCEDURE GetOfficeByCountry(IN country...
  • Mysql 存储过程传递参数设置
  • Sql 存储过程传递参数

    千次阅读 2017-09-25 13:39:39
    Sql Server 存储过程 传递参数 有时候需要 “1,2,3” 这样的参数 --------------------------- declare @AreadBranchID nvarchar(200) set @AreadBranchID=';2;36;3;21;23;' select * from UserInfo ...
  • Java调用存储过程--传入集合参数 具体的方法描述分析
  • VBA过程调用和参数传递

    千次阅读 2020-07-28 11:05:23
    参数传递,按址传递: Option Explicit Sub demo() Dim n As Long '乘以十输出 n = InputBox("你没个月工资多少,诚实说:") Call nTimesTen(n) MsgBox "乘10说的话,我工资一个月" & n & "块" End Sub Private Sub ...
  • 4.3.2 存储过程参数模式 1、IN模式参数 2、OUT模式参数 3、IN OUT模式参数
  • 存储过程传递对象参数思路案例 思路 将对象封装成xml,传递给数据库,再使用解析XML将数据放入临时表 案例 declare @ExcelData_XML xml = N'<Root><Record Customer="UQ" SO_No="01247N231" Material_No="5...
  • C++中函数调用时的三种参数传递方式详解

    万次阅读 多人点赞 2017-08-31 20:44:51
    原文地址:http://blog.csdn.net/cocohufei/article/details/6143476;  ...   在C++中,参数传递方式是“实虚结合”。 按值传递(pass by value) 地址传递(pass by pointer) 引用传递(pass b...
  • 存储过程需要根据部门名称相关数据修改。用varray的话估计要申请很大的空间。可不可以直接传递一个String,然后在存储过程里拆分称department\_name in('A','B','C')这样的参数

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 467,700
精华内容 187,080
关键字:

存储过程参数的传递方式

友情链接: p16.rar