mysql 存储过程相互调用_MySQL存储过程相互调用

--表格

mysql> select corderno,mshippingcharges,mgiftwrapcharges from orders;

+----------+------------------+------------------+

| corderno | mshippingcharges | mgiftwrapcharges |

+----------+------------------+------------------+

| 000001 | 6 | 1.25 |

| 000002 | 8 | 2 |

| 000003 | 12 | 0 |

+----------+------------------+------------------+

9 rows in set

--

create procedure prccharges(in orderno char(6),

out shippingCharges float(4,2),out wrapCharges float(4,2))

begin

select mshippingcharges into shippingCharges from

orders where corderno = orderno;

select mgiftwrapcharges into wrapcharges from orders where corderno = orderno;

end;

--执行时命令

call prccharges('000001',@pp,@qq);

select @pp,@qq;

--执行结果

mysql> select @pp,@qq;

+-----+------+

| @pp | @qq |

+-----+------+

| 6 | 1.25 |

+-----+------+

1 row in set

create procedure prcHandLingCharges(in orderno char(6),

out handlingCharges float(4,2))

begin

declare ppp float(4,2);

declare qqq float(4,2);

call prccharges(orderno,ppp,qqq);

set handlingCharges = ppp + qqq;

end;

--执行时命令

call prcHandLingCharges('000001',@qqqq);

select @qqqq;

--执行结果

mysql> select @qqqq;

+-------+

| @qqqq |

+-------+

| 7.25 |

+-------+

1 row in set

2、在存储过程中,可以使用动态执行sql的方式来返回结果集。eg:

DELIMITER $$

DROP procedure IF EXISTS pro_report_data $$

CREATE procedure pro_report_data(in startT varchar(100),in stopT varchar(100),in buyerFilter varchar(20),gfs varchar(2000),qfs varchar(2000))

BEGIN

declare colsStr varchar(2000);

declare tableStr varchar(2000);

declare whereStr varchar(2000);

declare groupStr varchar(2000);

declare sqls varchar(2000);

call createReportSql4Other(null,null,0,buyerFilter,gfs,qfs,2,startT,stopT,0,colsStr,tableStr,whereStr,groupStr);

set sqls= concat('select ',colsStr,' from ',tableStr,' where ',whereStr,' group by ',groupStr);

set @ms=sqls;

PREPARE s1 from @ms;

EXECUTE s1;

deallocate prepare s1;

END$$

DELIMITER;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于MySQL调用存储过程传参,我们先来看一下如何传入和传出参数的MySQL存储过程。 1. 传入参数的MySQL存储过程: 在MySQL中,我们可以使用IN关键字来指定一个存储过程需要传入的参数。例如: ``` CREATE PROCEDURE procedure_name(IN param1 INT, IN param2 VARCHAR(50)) BEGIN // 存储过程的具体逻辑 END; ``` 在上面的存储过程中,我们指定了两个参数:param1和param2,它们的类型分别为INT和VARCHAR(50),并且都是传入参数(IN)。 2. 传出参数的MySQL存储过程: 在MySQL中,我们可以使用OUT关键字来指定一个存储过程需要传出的参数。例如: ``` CREATE PROCEDURE procedure_name(OUT param1 INT, OUT param2 VARCHAR(50)) BEGIN // 存储过程的具体逻辑 END; ``` 在上面的存储过程中,我们指定了两个参数:param1和param2,它们的类型分别为INT和VARCHAR(50),并且都是传出参数(OUT)。 3. 传入和传出参数的MySQL存储过程: 如果我们需要一个存储过程同时具有传入和传出参数,我们可以将IN和OUT关键字组合使用。例如: ``` CREATE PROCEDURE procedure_name(IN param1 INT, OUT param2 VARCHAR(50)) BEGIN // 存储过程的具体逻辑 END; ``` 在上面的存储过程中,我们指定了两个参数:param1和param2,它们的类型分别为INT和VARCHAR(50),其中param1是传入参数(IN),param2是传出参数(OUT)。 以上就是关于MySQL调用存储过程传参的一些基本知识,希望能对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值