【GBase】gbase 8a存储过程示例

【GBase】gbase 8a存储过程示例GBase是南大通用数据技术有限公司推出的自主品牌的数据库产品,目前在国内数据库市场具有较高的品牌知名度。本篇内容使用版本为GBase8a,由于gbase8a基于mysql开发,所以语法与其有很多相似之处。DROPPROCEDUREIFEXISTSanrpt.p_procedure_demo;CREATEPROCEDUREanrpt.p_procedure_demo(I…

GBase 是南大通用数据技术有限公司推出的自主品牌的数据库产品,目前在国内数据库市场具有较高的品牌知名度。

本篇内容使用版本为GBase 8a,由于gbase 8a基于mysql开发,所以语法与其有很多相似之处。

DROP PROCEDURE IF EXISTS anrpt.p_procedure_demo;
CREATE PROCEDURE anrpt.p_procedure_demo(IN v_month varchar)

        /*
        gbase 8a 存储过程小例子
    */
BEGIN
        /*
        声明变量(DECLARE),可以给默认值
    */

    DECLARE v_sql text;
    DECLARE p1 INT DEFAULT 1;
    DECLARE v_month_last varchar(10);
    DECLARE v_rowline INT DEFAULT 0;

    DECLARE done INT DEFAULT 0; 
    DECLARE cnt INT DEFAULT 0;
    DECLARE s_region varchar(20); 
    DECLARE stmp CHAR(255) DEFAULT ”; 
    DECLARE p2 CHAR(255) DEFAULT ”; 
    DECLARE p3 CHAR(255) DEFAULT ”; 

    — 定义变量必须在定义游标之前!!!

   DECLARE cur REF CURSOR; 
   DECLARE cur_region CURSOR FOR select prod_analysis_type from anrpt.rpt_analysis_product_conf LIMIT 20; 
   DECLARE CONTINUE HANDLER FOR SQLSTATE ‘02000’ SET done = 1; 
        /*
        条件判断( IF…THEN…ELSE…END IF)
    */
         IF LENGTH(v_month) <> 6 THEN 
         SET v_month = date_format(NOW(),’%Y%m’);
             /*
                    给变量赋值(set)
             */
             SET v_month_last = date_format(date_add(CONCAT(v_month,’01’), interval -1 month),’%Y%m’); — 上月

         END IF; 

    /*
        执行动态SQL,支持输入参数
    */
    drop table if exists tmp.rpt_analysis_product_conf;
        SET v_sql = ‘create table tmp.rpt_analysis_product_conf as select * from anrpt.rpt_analysis_product_conf where conf_seq = ? ‘;
    /*
        执行输出日志信息(SELECT) 
    */
        SELECT concat(‘v_sql is ‘, v_sql);
        SET @sql_str = v_sql;
        SET @sql_v_month = v_month;
            PREPARE stmt FROM @sql_str; 
            EXECUTE stmt USING @sql_v_month; 

    /*
        循环(LOOP END LOOP) 
    */
       label1: LOOP 
       SET p1 = p1 + 1; 
       IF p1 < 10 THEN 
                SELECT concat(‘p1 is ‘, p1);
                ITERATE label1; 
             END IF; 
                
       LEAVE label1; 
       END LOOP label1; 

    /*
        静态游标(CURSOR)
    */
         SELECT concat(‘cnt is ‘, cnt);
     OPEN cur_region; 
     REPEAT 
     FETCH cur_region INTO s_region; 

       IF NOT done THEN 
        SET cnt=cnt+2;
                SELECT concat(‘s_region is ‘, s_region); 
       END IF; 
     UNTIL done END REPEAT; 
     CLOSE cur_region; 

    /*
        动态游标(REF CURSOR)
    */
  SET v_sql = ‘select prod_analysis_type,prod_name from anrpt.rpt_analysis_product_conf’; 
  SET @sql_str = v_sql; 
  OPEN cur FOR @sql_str; 
  FETCH cur INTO p2, p3;
                SELECT concat(p2,’ + ‘, p3); 

     END;

 

——————————————————————————————

— 查看创建函数脚本 

SHOW CREATE PROCEDURE anrpt.p_procedure_demo;

— 执行创建函数脚本 

CALL anrpt.p_procedure_demo(‘1’)

 

今天的文章【GBase】gbase 8a存储过程示例分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/11743.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注