MysqlParameters参数

原创 2013年12月04日 10:06:53


  • 语法:如何定义参数
    全选示例 :
    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;

带parameter参数的批量插入和更新

批量插入或更新数据的时候,如果每条SQL语句都打开关闭一次数据库,如果数据量大的时候,会明显的对数据库造成很大的压力,那么我们能不能使用打开一次数据库,等待所有 语句更新完毕,再关闭数据库呢? ...
  • xuejunling
  • xuejunling
  • 2014年03月26日 14:03
  • 3134

【Jmeter】参数Parameters(2)

在写一个接口时,该接口的参数规则如下://参数规则 params: { deviceIds: ['string'], //* 选中的设备 channel: 'number...
  • lluozh2015
  • lluozh2015
  • 2017年05月25日 14:53
  • 154

HTTP请求中的form data,request payload,query string parameters以及在node服务器中如何接收这些参数

今天,在工作(倒腾微信小程序)的时候,发现发送post请求到node后台服务器接收不到前端传来的参数。其实也不是完全不能,期初用jquery中的ajax进行时候是没有任何问题的(后台可以接受参数)。 ...
  • mingqingyuefeng
  • mingqingyuefeng
  • 2017年06月25日 17:19
  • 1352

理解参数(arguments)

/* 实际上,在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数 即便你定义的函数只接收两个参数,在调用这个函数时也未必一定要传递两个参数。 ...
  • qq_15253407
  • qq_15253407
  • 2016年01月27日 14:39
  • 330

用JUnit4进行参数化测试

原文地址:http://blog.csdn.net/nlznlz/article/details/39431887 参数化测试是一个JUnit 3不具备的功能。   基本使用...
  • u011546806
  • u011546806
  • 2015年03月08日 17:58
  • 465

Solr 查询参数

solr常用查询参数 q:查询关键词。支持 AND,OR ,*,?。支持多字段查询,模糊匹配。 fq:filter query,过虑查询。 sort:排序规则。默认按score排序。 start, r...
  • wbcg111
  • wbcg111
  • 2015年08月22日 20:38
  • 798

JUnit之参数化测试和成组测试的使用

JUnit之参数化测试和成组测试的简单使用
  • yqj2065
  • yqj2065
  • 2014年10月10日 20:09
  • 5419

TestNG的参数化测试、共享线程池配置、参数默认值配置

TestNG的参数化测试、共享线程池配置、参数默认值配置,以及采用多线程的方式运行测试代码...
  • wanghantong
  • wanghantong
  • 2014年10月21日 17:42
  • 6951

如何取得用户参数文件中的parameters

TCode:SU01或SU3中可以看到用户参数文件(user profile)中的parameter : 这个parameters可以通过函数 BAPI_USER_GET_DETAIL ...
  • zhongguomao
  • zhongguomao
  • 2017年11月21日 16:57
  • 123

shell脚本:访问shell脚本的参数

所谓的位置参数(positional parameters)指的也就是shell脚本的命令行参数(command line arguments)。在shell函数里,它们同时也可以是函数的参数。各参数...
  • Arthur__yan
  • Arthur__yan
  • 2015年07月29日 22:42
  • 294
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MysqlParameters参数
举报原因:
原因补充:

(最多只允许输入30个字)