MySQL存储过程

Sql代码   收藏代码
  1. /*创建有输入输出参数的存储过程*/  
  2. DELIMITER $$  
  3. DROP PROCEDURE IF EXISTS `cosbuyer`.`pp`$$  
  4. CREATE   
  5.   PROCEDURE `cosbuyer`.`pp`(IN a INT,IN b INT,OUT c INT)    
  6.   BEGIN  
  7.     SET c=a+b;  
  8.     SELECT c;  
  9.   END$$  
  10. DELIMITER ;  
  11.   
  12. CALL pp(10,20,@a);  
  13. SELECT @a;  
  14.   
  15.   
  16.   
  17.   
  18. /*创建有输入输出参数分页的存储过程*/  
  19. DELIMITER $$  
  20. DROP PROCEDURE IF EXISTS `cosbuyer`.`fenye`$$  
  21. CREATE   
  22.   PROCEDURE `cosbuyer`.`fenye`(  
  23.   IN p_table_name VARCHAR(1024),  
  24.   IN p_fields VARCHAR(1024),  
  25.   IN p_page_size INT,  
  26.   IN p_page_now INT,  
  27.   IN p_order_string VARCHAR(128),  
  28.   IN p_where_string VARCHAR(1024),  
  29.   OUT p_out_rows INT)    
  30.   NOT DETERMINISTIC  
  31.   SQL SECURITY DEFINER  
  32.   COMMENT '分页存储过程'  
  33. BEGIN  
  34.   /*定义变量*/  
  35.   DECLARE m_begin_row INT DEFAULT 0;  
  36.   DECLARE m_limit_string CHAR(64);  
  37.   /*构造语句*/  
  38.   SET m_begin_row = (p_page_now - 1)*p_page_size;  
  39.   SET m_limit_string = CONCAT(' limit ',m_begin_row,',',p_page_size);  
  40.   /*定义变量*/  
  41.   SET @COUNT_STRING = CONCAT('select count(*) into  @ROWS_TOTAL from ',p_table_name,' ',p_order_string);  
  42.   SET @MAIN_STRING = CONCAT('select ',p_fields,' from ',p_table_name,' ',p_where_string,' ',p_order_string,' ',m_limit_string);  
  43.    /*预处理*/  
  44.   PREPARE count_stmt FROM @COUNT_STRING;  
  45.   EXECUTE count_stmt;  
  46.   DEALLOCATE PREPARE count_stmt;  
  47.   SET p_out_rows = @ROWS_TOTAL;  
  48.     
  49.   PREPARE main_stmt FROM @MAIN_STRING;  
  50.   EXECUTE main_stmt;  
  51.   DEALLOCATE PREPARE main_stmt;  
  52.     
  53.   END$$  
  54. DELIMITER ;  
  55.   
  56.   
  57.   
  58. CALL fenye( 'tb_pdt_product','id,pdtname,price',10,11,'order by id desc ',' ',@abc);  
  59. SELECT @abc;  
  60.   
  61.   
  62.   
  63.   
  64.   
  65.   
  66.   
  67. 说明:  
  68. declare v_name varchar(50) default 'abc';  
  69. set abc = 'singhoo';  
  70. set @name='singhoo';  
  71.   
  72. @name与v_name的区别是:  
  73. 它们的作用范围不一样@name是在会话过程起作用,它的作用是全局的,在存储过程之外也可以调用  
  74. v_name是在begin...end语句块内,只能在块中使用  
  75. 而且@name要定义在最后,否则会出错  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值