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;
阅读更多
个人分类: 数据库
想对作者说点什么? 我来说一句

QQ远控精灵命令参数

2010年08月09日 8B 下载

ADC参数(ADC参数)

2010年06月08日 32KB 下载

ping的参数!ping的参数

2010年01月29日 2KB 下载

XCOPY参数XCOPY参数XCOPY参数

2010年09月18日 2KB 下载

硬盘参数详细解说

2011年12月22日 1.54MB 下载

笔记本参数

2008年08月20日 417KB 下载

没有更多推荐了,返回首页

不良信息举报

MysqlParameters参数

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭