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
    

例二:

01mysql>
02mysql> delimiter $$
03mysql>
04mysql> CREATE PROCEDURE myProc()
05    ->      MODIFIES SQL DATA
06    -> BEGIN
07    ->      DECLARE l_status VARCHAR(20);
08    ->
09    ->     CALL myProc1(l_status);
10    ->        IF l_status='Duplicate Entry' THEN
11    ->               SELECT CONCAT('Warning: using existing definition for location ') AS warning;
12    ->      END IF;
13    -> END$$
14Query OK, 0 rows affected (0.00 sec)
15  
16mysql>
17mysql> CREATE PROCEDURE myProc1(OUT out_status VARCHAR(30))
18    -> BEGIN
19    ->    set out_status = 'Duplicate Entry';
20    -> END$$
21Query OK, 0 rows affected (0.00 sec)
22  
23mysql>
24mysql>
25mysql> delimiter ;
26mysql> call myProc();
27+--------------------------------------------------+
28| warning                                          |
29+--------------------------------------------------+
30| Warning: using existing definition for location  |
31+--------------------------------------------------+
321 row in set (0.00 sec)
33  
34Query OK, 0 rows affected (0.01 sec)
35  
36mysql> drop procedure myProc;
37Query OK, 0 rows affected (0.00 sec)
38  
39mysql> drop procedure myProc1;
40Query OK, 0 rows affected (0.00 sec)
41  
42mysql>
43mysql>












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值