MySQL存储过程相互调用

1、存储过程相互调用:
--表格
      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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赶路人儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值