当前位置:   article > 正文

PostgreSQL存储过程(六):结构控制和循环_pg 存储过程 循环

pg 存储过程 循环

结构控制和循环介绍:

 

        作为编程语言中极为重要的知识,控制和循环可以降低代码量和减少人的工作量。在PL/PGSQL中实现了常用的控制结构和循环方法,灵活使用确实可以用来提高数据库查询的效率。

结构控制:

1. 结构:IF ... THEN ... ELSIF ... THEN ... ELSE ... END IF

  1. CREATE OR REPLACE FUNCTION mydb.mysc.learn_conditional01(IN num integer,OUT result_str varchar(20)) AS
  2. $BODY$
  3. BEGIN
  4. IF num <= 0 THEN
  5. result_str = '小于等于0';
  6. ELSIF num <= 100 THEN
  7. result_str = '(0-100]';
  8. ELSIF num <= 1000 THEN
  9. result_str = '(100-1000]';
  10. ELSE
  11. result_str = '1000以上';
  12. END IF;
  13. END;
  14. $BODY$
  15. LANGUAGE plpgsql;

输出示例:

2. 结构:CASE ... WHEN ... THEN ... ELSE ... END CASE

  1. CREATE OR REPLACE FUNCTION mydb.mysc.learn_conditional02(IN num integer,OUT result_str varchar(20)) AS
  2. $BODY$
  3. BEGIN
  4. CASE num
  5. WHEN 1,2,3,4,5 THEN
  6. result_str = '1-5之间';
  7. WHEN 7,8,9,10,11 THEN
  8. result_str = '7-11之间';
  9. WHEN 12,13,14,15,16 THEN
  10. result_str = '12-16之间';
  11. ELSE
  12. result_str = '其他的';
  13. END CASE;
  14. END;
  15. $BODY$
  16. LANGUAGE plpgsql;

输出示例:

3. 结构:CASE WHEN ... THEN ... ELSE ... END CASE

  1. CREATE OR REPLACE FUNCTION mydb.mysc.learn_conditional03(IN num integer,OUT result_str varchar(20)) AS
  2. $BODY$
  3. BEGIN
  4. CASE
  5. WHEN num <= 0 THEN
  6. result_str = '小于等于0';
  7. WHEN num <= 100 THEN
  8. result_str = '(0-100]';
  9. WHEN num <= 1000 THEN
  10. result_str = '(100-1000]';
  11. ELSE
  12. result_str = '1000以上';
  13. END CASE;
  14. END;
  15. $BODY$
  16. LANGUAGE plpgsql;

输出示例:

循环:

1. LOOP循环

  1. CREATE OR REPLACE FUNCTION mydb.mysc.learn_conditional04(OUT loopcnt integer) AS
  2. $BODY$
  3. DECLARE counter integer = 1;
  4. BEGIN
  5. LOOP
  6. EXIT WHEN counter > 100; -- 条件满足时退出循环
  7. counter := counter+1;
  8. CONTINUE WHEN counter = 50; -- 条件满足时,跳过下边的代码进入下一次循环
  9. RAISE notice '这是第%次循环',counter;
  10. END LOOP;
  11. loopcnt = counter;
  12. END;
  13. $BODY$
  14. LANGUAGE plpgsql;

输出示例:

2. WHILE循环

  1. CREATE OR REPLACE FUNCTION mydb.mysc.learn_conditional05(OUT loopcnt integer) AS
  2. $BODY$
  3. DECLARE counter integer = 1;
  4. BEGIN
  5. WHILE counter<=100 LOOP
  6. RAISE notice '这是第%次循环',counter;
  7. counter:=counter+1;
  8. END LOOP;
  9. loopcnt = counter;
  10. END;
  11. $BODY$
  12. LANGUAGE plpgsql;

输出示例:

3. FOR循环

  1. -- IN可以跟子查询
  2. CREATE OR REPLACE FUNCTION mydb.mysc.learn_conditional06()
  3. RETURNS Void AS
  4. $BODY$
  5. DECLARE counter integer = 1;
  6. BEGIN
  7. RAISE notice '--------------';
  8. FOR i IN 1..10 LOOP
  9. RAISE notice '这是第%次循环',i;
  10. END LOOP;
  11. RAISE notice '--------------';
  12. FOR i IN REVERSE 10..1 LOOP
  13. RAISE notice '这是倒序的第%次循环',i;
  14. END LOOP;
  15. RAISE notice '--------------';
  16. FOR i IN 1..10 BY 3 LOOP --间隔2个数字
  17. RAISE notice '这是间隔2个数的第%次循环',i;
  18. END LOOP;
  19. END;
  20. $BODY$
  21. LANGUAGE plpgsql;

输出示例:

4. FOREACH循环

  1. -- 实现传入数组的累加功能
  2. CREATE OR REPLACE FUNCTION mydb.mysc.learn_conditional07(IN intarray int[],OUT resultnum integer)AS
  3. $BODY$
  4. DECLARE
  5. x int;
  6. tmp integer := 0;
  7. BEGIN
  8. FOREACH x IN ARRAY intarray
  9. LOOP
  10. RAISE notice '这是%',x;
  11. tmp := tmp + x;
  12. END LOOP;
  13. resultnum = tmp;
  14. END;
  15. $BODY$
  16. LANGUAGE plpgsql;

输出示例:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/406043
推荐阅读
相关标签
  

闽ICP备14008679号