zoukankan      html  css  js  c++  java
  • sql编程中流程控制 IF ……THEN……ELSEIF……THEN………END IF

    写mysql存储过程应注意的几点:

    1、声明变量(declare)时要注意字符集,用变量存储表字段时,表字段与变量的字符编码要一致。

    2、mysql的字符合并不能用‘+’号,必须用concat函数。

    3、每个游标必须使用不同的declare continue handler for not found set done=1来控制游标的结束。

    BEGIN

    declare rt VARCHAR(100) CHARACTER SET gbk DEFAULT NULL;

    declare done tinyint(1) default 0;

    DECLARE ttname VARCHAR(60) CHARACTER SET gbk DEFAULT NULL;

    DECLARE tsqltxt VARCHAR(512) CHARACTER SET gbk DEFAULT NULL;

    DECLARE tremarks VARCHAR(60) CHARACTER SET gbk DEFAULT NULL;

    DECLARE tfield VARCHAR(60) CHARACTER SET gbk DEFAULT NULL;

    DECLARE curtable CURSOR FOR

          SELECT distinct TABLE_name

           FROM information_schema.TABLEs where TRIM(TABLE_COMMENT)<>'' and TRIM(TABLE_COMMENT)<>'VIEW'  order by TABLE_name;

    declare continue handler for not found set done=1;

     set NAMES 'utf8';

    drop table if EXISTS GetTableSQL;

    CREATE TABLE `gettablesql` (

      `tbname` varchar(60) CHARACTER SET gbk DEFAULT NULL,

      `sqltxt` varchar(4096) CHARACTER SET gbk DEFAULT NULL,

      `tabletitle` varchar(51) CHARACTER SET gbk DEFAULT NULL

    ) ENGINE=InnoDB;

    open curtable;

       tableloop:

      LOOP

          set tsqltxt='select';

          FETCH curtable

          INTO ttname;

          IF done = 1 THEN

             LEAVE tableloop;

          END IF;

          -- select ttname;

     BEGIN

           declare done1 tinyint(1) default 0;

           DECLARE curfield CURSOR FOR

          
    SELECT  COLUMN_NAME,COLUMN_COMMENT

                FROM information_schema.COLUMNS  where upper(TABLE_name)=upper(ttname) and (COLUMN_COMMENT<>'') ;

           declare continue handler for not found set done1=1;

          OPEN curfield;

             fieldloop:

           LOOP

            FETCH curfield

            INTO tfield,tremarks;

            IF done1 = 1 THEN

             LEAVE fieldloop;

            END IF;

            if tsqltxt='select' THEN

               set tsqltxt=CONCAT(tsqltxt,' ',tfield,' ','''',tremarks,'''');

            ELSE

               set tsqltxt=CONCAT(tsqltxt,',',tfield,' ','''',tremarks,'''');

            END IF;

          

           END LOOP fieldloop;

           close curfield;

           set tsqltxt=concat(tsqltxt,' from ',ttname);

           insert into GetTableSQL values(ttname,tsqltxt,'');

    END;

       END LOOP tableloop;

       close curtable;

      update GetTableSQL as G set tabletitle=(select TABLE_COMMENT from information_schema.TABLEs  s

       where (trim(s.TABLE_COMMENT)<>'') and g.tbname=s.table_name );

      select cast(count(*) as char) into rt from GetTableSQL;

      set rt=concat('成功更新',rt,'个表的表名注释和字段注释到字典库GetTableSQL中!');

      SELECT rt;

    END

  • 相关阅读:
    BZOJ 4802 欧拉函数(Pollard_Rho)
    Codeforces 804E The same permutation(构造)
    Codeforces 804D Expected diameter of a tree(树形DP+期望)
    BZOJ 3399 [Usaco2009 Mar]Sand Castle城堡(贪心)
    BZOJ 2430 [Poi2003]Chocolate(贪心+归并排序)
    BZOJ 1707 [Usaco2007 Nov]tanning分配防晒霜(扫描线+贪心+优先队列)
    BZOJ 1828 [Usaco2010 Mar]balloc 农场分配(贪心+线段树)
    BZOJ 1827 [Usaco2010 Mar]gather 奶牛大集会(树形DP)
    BZOJ 2697 特技飞行(贪心)
    BZOJ 4883 [Lydsy2017年5月月赛]棋盘上的守卫(最小生成环套树森林)
  • 原文地址:https://www.cnblogs.com/caicaizi/p/4940390.html
Copyright © 2011-2022 走看看