MysqlParameters参数


  • 语法:如何定义参数
    全选 示例 :
    1.CREATE PROCEDURE pro1()...
    2.CREATE PROCEDURE pro2([IN] para_name DATA-TYPE)...
    3.CREATE PROCEDURE pro3(OUT para_name DATA-TYPE)...
    4.CREATE PROCEDURE pro4(INOUT para_name DATA-TYPE)...
    

解释:上面的例子中,第一个表示无参数的;第二个表示有一个输入参数,这里的IN是可选的,因为默认为输入参数;第三个表示有一个输出参数,即返回值;第四个有一个既可作为输入又可作为输出的参数。

  • 实例解析1
    全选 示例:创建存储过程及定义参数 :
    DELIMITER $$
    
    USE `mrms_dev`$$
    
    DROP PROCEDURE IF EXISTS `mrms_procedure_strategyExceedCutAll`$$
    
    CREATE DEFINER=`root`@`%` PROCEDURE `mrms_procedure_strategyExceedCutAll`(
        IN  tmp_enterpriseEnglishName  VARCHAR(5),
        IN  tmp_code VARCHAR(20),
        IN  tmp_classes VARCHAR(20),
        IN  tmp_typeName VARCHAR(20),
        IN  tmp_medicineName VARCHAR(50),
        IN  tmp_agent VARCHAR(50),
        IN  tmp_guige VARCHAR(60),
        IN  tmp_unit VARCHAR(20),
        IN  tmp_total INT(11),
        IN  tmp_unitPrice FLOAT,
        IN  tmp_totalPrice FLOAT,
        IN  tmp_maker VARCHAR(100),
        IN  tmp_createTime TIMESTAMP,
        IN  tmp_comment VARCHAR(100),
        IN  tmp_status INT(11),
        IN  tmp_isBackUp TINYINT(1),
        -- 以上均为输入参数
        
        INOUT tmp_sum_price FLOAT, /* 输入输出参数:在此存储过程中可以直接使用,并将
                                   计算结果返回给调用者。*/
        INOUT tmp_sum_count INT, -- 输入输出参数
        IN tmp_plan_price FLOAT,
        IN tmp_plan_count INT,
        IN i INT,
        INOUT hasMain BOOLEAN) -- 输入输出参数
    BEGIN
    	-- 声明临时变量,用于cur插入字段 --
    	DECLARE insert_cur_total INT(11) DEFAULT 0;  
    	DECLARE insert_cur_totalPrice FLOAT DEFAULT 0;
             
    	     -- 由于临时表进行排序,第一条肯定是主药品
    	     IF i = 0 THEN 
                      IF tmp_isBackUp =0 THEN 
                         SET hasMain = TRUE;
                         IF tmp_sum_price < tmp_plan_price || tmp_sum_count < tmp_plan_count THEN
                             
                             -- 由于第一次录的是主药品,不可能在录入之前就满足计划了(前提是计划数据不为0)
                             
                             IF (tmp_sum_count + tmp_total) >= tmp_plan_count THEN
    				SET insert_cur_total = tmp_plan_count - tmp_sum_count;
    		         ELSE
    				SET insert_cur_total = tmp_total;
    		         END IF;
    		         IF (tmp_sum_price + tmp_totalPrice) >= tmp_plan_price THEN
    				SET insert_cur_totalPrice = tmp_plan_price - tmp_sum_price;
    		         ELSE
    				SET insert_cur_totalPrice = tmp_totalPrice;
    		         END IF;
    		         INSERT INTO      
                                    mrms_medicine_info_cur(enterpriseEnglishName,
                                    CODE,classes,typeName,medicineName,agent,
                                    guige,unit,total,unitPrice,totalPrice,
                                    maker,createTime,COMMENT,STATUS,isBackUp) 
    		             VALUES (tmp_enterpriseEnglishName,tmp_code,
                                    tmp_classes,tmp_typeName,tmp_medicineName,
                                    tmp_agent,tmp_guige,tmp_unit,insert_cur_total,
                                    tmp_unitPrice,insert_cur_totalPrice,tmp_maker,
                                    tmp_createTime,tmp_comment,tmp_status,
                                    tmp_isBackUp);
    		         
    		         SET tmp_sum_price = tmp_sum_price + insert_cur_totalPrice;
    		         SET tmp_sum_count = tmp_sum_count + insert_cur_total;
    		         
                         END IF;
                         
    	          END IF;
                 ELSE 
                      IF hasMain = TRUE && tmp_isBackUp = 1 && ( tmp_sum_price < tmp_plan_price || tmp_sum_count < tmp_plan_count ) THEN
    		     
                             -- 由于主药品已经进行了截取,所以tmp_sum_count不可能大于tmp_plan_count
                             IF tmp_sum_count = tmp_plan_count THEN  -- 计划数量已经录够
    				SET insert_cur_total = 0;
    			 ELSE
    				IF (tmp_sum_count + tmp_total) >= tmp_plan_count THEN
    					SET insert_cur_total = tmp_plan_count - tmp_sum_count;
    				ELSE
    					SET insert_cur_total = tmp_total;
    				END IF;
    			 END IF;	
                             
                             IF tmp_sum_price = tmp_plan_price THEN -- 计划金额已经录够
    				SET insert_cur_totalPrice = 0;
                             ELSE
    				IF (tmp_sum_price + tmp_totalPrice) >= tmp_plan_price THEN
    					SET insert_cur_totalPrice = tmp_plan_price - tmp_sum_price;
    				ELSE
    					SET insert_cur_totalPrice = tmp_totalPrice;
    				END IF;
                             END IF;
    		         
    		         INSERT INTO 
                                    mrms_medicine_info_cur(enterpriseEnglishName,
                                    CODE,classes,typeName,medicineName,agent,
                                    guige,unit,total,unitPrice,totalPrice,
                                    maker,createTime,COMMENT,STATUS,isBackUp) 
    		             VALUES (tmp_enterpriseEnglishName,tmp_code,
                                    mrms_medicine_info_cur(enterpriseEnglishName,
                                    CODE,classes,typeName,medicineName,agent,
                                    guige,unit,total,unitPrice,totalPrice,
                                    maker,createTime,COMMENT,STATUS,isBackUp)    
    		        
    		         SET tmp_sum_price = tmp_sum_price +       insert_cur_totalPrice;
    		         SET tmp_sum_count = tmp_sum_count + insert_cur_total;  
    		         
                      END IF;
                      
                 END IF;
                 
            
        END$$
    
    DELIMITER ;
    
  • 实例解析2
    全选 示例:调用存储过程,及获取返回结果 :
    /*注:只拿出调用者的部分代码,这些参数已在调用者中定义*/
     CALL mrms_procedure_strategyExceedCutAll(tmp_enterpriseEnglishName,
    					tmp_code,
    					tmp_classes,
    					tmp_typeName,
    					tmp_medicineName,
    				        tmp_agent,
    					tmp_guige,
    					tmp_unit,
    					tmp_total,
    					tmp_unitPrice,
    					tmp_totalPrice,
    					tmp_maker,
    					tmp_createTime,
    					tmp_comment,
    					tmp_status,
    					tmp_isBackUp,
    					tmp_sum_price,--输入输出参数
    				        tmp_sum_count,--输入输出参数
    					tmp_plan_price,
    					tmp_plan_count,
    					i,
    					hasMain --输入输出参数
                                            );	      	      
    /*注:INOUT参数在调用这种通过返回值,直接给现有变量赋值,如上*/
    
  • 实例解析3
    全选 示例:单独解析输出(OUT)参数用法 :
    DELIMITER $$
    
    USE `test_dev`$$
    
    DROP PROCEDURE IF EXISTS `mrms_procedure_strategyExceedStop`$$
    
    CREATE DEFINER=`root`@`%` PROCEDURE `mrms_procedure_strategyExceedStop`(
        IN  tmp_enterpriseEnglishName  VARCHAR(5),
        IN  tmp_code VARCHAR(20),
        IN  tmp_classes VARCHAR(20),
        IN  tmp_typeName VARCHAR(20),
        IN  tmp_medicineName VARCHAR(50),
        IN  tmp_agent VARCHAR(50),
        IN  tmp_guige VARCHAR(60),
        IN  tmp_unit VARCHAR(20),
        IN  tmp_total INT(11),
        IN  tmp_unitPrice FLOAT,
        IN  tmp_totalPrice FLOAT,
        IN  tmp_maker VARCHAR(100),
        IN  tmp_createTime TIMESTAMP,
        IN  tmp_comment VARCHAR(100),
        IN  tmp_status INT(11),
        IN  tmp_isBackUp TINYINT(1),
        
        IN tmp_sum_price FLOAT,
        IN tmp_sum_count INT,
        IN tmp_plan_price FLOAT,
        IN tmp_plan_count INT,
        IN i INT,
        IN hasMain BOOLEAN,
        -- 以上均为输入参数
        OUT tmp_sum_price_out FLOAT,-- 输出参数
        OUT tmp_sum_count_out INT, -- 输出参数
        OUT hasMain_out BOOLEAN)-- 输出参数
    BEGIN
    	     IF i = 0 THEN 
                      IF tmp_isBackUp =0 THEN
                         SET hasMain = TRUE;
                         IF tmp_sum_price < tmp_plan_price || tmp_sum_count < tmp_plan_count THEN
                             INSERT INTO 
                                      mrms_medicine_info_cur(enterpriseEnglishName,
                                      CODE,classes,typeName,medicineName,agent,
                                      guige,unit,total,unitPrice,totalPrice,
                                      maker,createTime,COMMENT,STATUS,isBackUp) 
    
                                  VALUES (tmp_enterpriseEnglishName,tmp_code,
                                      tmp_classes,tmp_typeName,tmp_medicineName,
                                      tmp_agent,tmp_guige,tmp_unit,tmp_total,
                                      tmp_unitPrice,tmp_totalPrice,tmp_maker,
                                      tmp_createTime,tmp_comment,tmp_status,
                                      tmp_isBackUp);
                               
                             -- 通过输入给输出赋值  
                             SET tmp_sum_price_out = tmp_sum_price + tmp_totalPrice;
                             SET tmp_sum_count_out = tmp_sum_count + tmp_total;
                             
                             SET hasMain_out = hasMain;
    			 
                         END IF;
                 
                      END IF;
                 ELSE 
                      IF hasMain = TRUE && tmp_isBackUp = 1 && ( tmp_sum_price < tmp_plan_price || tmp_sum_count < tmp_plan_count ) THEN
                          INSERT INTO mrms_medicine_info_cur(enterpriseEnglishName,
                                      CODE,classes,typeName,medicineName,agent,
                                      guige,unit,total,unitPrice,totalPrice,
                                      maker,createTime,COMMENT,STATUS,isBackUp) 
    
                                  VALUES (tmp_enterpriseEnglishName,tmp_code,
                                      tmp_classes,tmp_typeName,tmp_medicineName,
                                      tmp_agent,tmp_guige,tmp_unit,tmp_total,
                                      tmp_unitPrice,tmp_totalPrice,tmp_maker,
                                      tmp_createTime,tmp_comment,tmp_status,
                                      tmp_isBackUp);
                               
                          -- 通过输入给输出赋值     
                          SET tmp_sum_price_out = tmp_sum_price + tmp_totalPrice;
                          SET tmp_sum_count_out = tmp_sum_count + tmp_total;
                             
                          SET hasMain_out = hasMain;
                          
                      END IF;
                      
                 END IF;
                 
        END$$
    
    DELIMITER ;
    /*注:IN tmp_sum_price和OUT tmp_sum_price_out表示同样的意义,
          IN tmp_sum_count和OUT tmp_sum_count_out表示同样的意义,
          IN hasMain和OUT hasMain_out表示同样的意义
          只是将输入和输出完全分开,其实像这样情况完全可以按照实例解析2中的INOUT
          参数来处理*/
    
  • 实例解析4
    全选 示例:调用存储过程,及获取返回结果(OUT参数) :
    CALL mrms_procedure_strategyExceedStop(tmp_enterpriseEnglishName,
    					tmp_code,
    					tmp_classes,
    					tmp_typeName,
    					tmp_medicineName,
    					tmp_agent,
    					tmp_guige,
    					tmp_unit,
    					tmp_total,
    					tmp_unitPrice,
    					tmp_totalPrice,
    					tmp_maker,
    					tmp_createTime,
    					tmp_comment,
    					tmp_status,
    					tmp_isBackUp,
    					tmp_sum_price,
    					tmp_sum_count,
    					tmp_plan_price,
    					tmp_plan_count,
    					i,
    					hasMain,
    					@tmp_sum_price_out,-- OUT参数
    					@tmp_sum_count_out,-- OUT参数
    					@hasMain_out);-- OUT参数
                                            -- 调用时OUT参数必须加'@',
                                               并每个参数按顺序排列) 
    		
                    -- 输出参数给现有的变量赋值				      
    		SELECT @tmp_sum_price_out INTO tmp_sum_price;
    		SELECT @tmp_sum_count_out INTO tmp_plan_count;
    		SELECT @hasMain_out INTO hasMain;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值