当前位置:首页 > 开发 > 数据库 > 正文

mysql存储过程基本知识点

发表于: 2014-11-27   作者:无量   来源:转载   浏览:
摘要: --存储过程名和参数,参数中in表示传入参数,out标示传出参数,inout表示传入传出参数 create procedure p_procedurecode(in sumdate varchar(10)) begin declare v_sql varchar(500); --需要执行的SQL语句 declare sym varchar(6);
--存储过程名和参数,参数中in表示传入参数,out标示传出参数,inout表示传入传出参数

create procedure p_procedurecode(in sumdate varchar(10))   
begin
     declare v_sql varchar(500);    --需要执行的SQL语句
     declare sym varchar(6);
     
     declare var1 varchar(20);
     declare var2 varchar(70);
     declare var3 integer;

     --定义游标遍历时,作为判断是否遍历完全部记录的标记
     declare no_more_departments integer DEFAULT 0;     

     --定义游标名字为C_RESULT 
     DECLARE C_RESULT CURSOR FOR
             SELECT barcode,barname,barnum FROM tmp_table;

    --声明当游标遍历完全部记录后将标志变量置成某个值
     DECLARE CONTINUE HANDLER FOR NOT FOUND
             SET no_more_departments=1;

     set sym=substring(sumdate,1,6);     --截取字符串,并将其赋值给一个遍历

     --连接字符串构成完整SQL语句,动态SQL执行后的结果记录集,在MySQL中无法获取,因此需要转变思路将其放置到一个临时表中(注意代码中的写法)。一般写法如下:

     --     'Create TEMPORARY Table   表名(Select的查询语句);
     set v_sql= concat('Create TEMPORARY Table tmp_table(select aa as aacode,bb as aaname,count(cc) as ccnum from h',sym,' where substring(dd,1,8)=''',sumdate,''' group by aa,bb)');

     set @v_sql=v_sql;   --注意很重要,将连成成的字符串赋值给一个变量(可以之前没有定义,但要以@开头)
     prepare stmt from @v_sql;  --预处理需要执行的动态SQL,其中stmt是一个变量
     EXECUTE stmt;      --执行SQL语句
     deallocate prepare stmt;     --释放掉预处理段

     OPEN C_RESULT;       --打开之前定义的游标
     REPEAT                      --循环语句的关键词
           FETCH C_RESULT INTO VAR1, VAR2, VAR3;   --取出每条记录并赋值给相关变量,注意顺序

          --执行查询语句,并将获得的值付给一个变量 @oldaacode(注意如果以@开头的变量可以不用通过declare语句事先声明)
           select @oldaacode:=vcaaCode from T_sum where vcaaCode=var1 and dtDate=sumdate; 
           if @oldaacode=var1 then    --判断
              update T_sum set iNum=var3 where vcaaCode=var1 and dtDate=sumdate;
           else
               insert into T_sum(vcaaCode,vcaaName,iNum,dtDate) values(var1,var2,var3,sumdate);
           end if;
     UNTIL no_more_departments  END REPEAT;    --循环语句结束
     CLOSE C_RESULT;                            --关闭游标

     DROP TEMPORARY TABLE tmp_table;       --删除临时表
end;

mysql存储过程基本知识点

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
<!--$sinatopbar--> 博客首页 登录 注册 警告:你的微三国主城告急 发博文 博文 <!--$end si
<!--$sinatopbar--> 博客首页 登录 注册 警告:你的微三国主城告急 发博文 博文 <!--$end si
Mysql命令行客户端机的分隔符,如果你使用的是Mysql命令行实用程序,应该仔细的阅读此说明。 默认的
1.在命令行里些存储过程需要了解的一个命令:DELIMITER 使用 DELIMITER 将忽视 ; 作为语句的结束点
有三种类型的数据库存储程序 存储过程 能够接受输入输出参数,并能够在请求时执行的程序单元。 存储
存储过程和函数: 创建示例代码: DELIMITER $$ CREATE PROCEDURE proc(IN c_id INT, IN c_name VAR
实例262:使用存储过程实现用户注册 这是一个应用存储过程的实例 实例位置:光盘\mingrisoft\09\262
存储过程 存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理 存储过程的
mysql存储过程: 封装sql: create procedure p1() begin select * from t_news; end $ //mysql存储
1、刚开始时这样的 2、解决之后是这样的 3、有个解释说这样的: 注: 这里需要注意的是DELIMITER //
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号