如何在PostgreSQL,PL / pgSQL上执行匿名代码块切换CASE语句?

时间:2016-11-28 21:25:27

标签: postgresql plpgsql

如何在PostgreSQL上执行switch CASE语句,PL / pgSQL?

目前我们可能会对这样的IF块进行修改:

IF boolean THEN
    statements;
ELSE 
IF boolean THEN
    statements;
ELSE 
   statements;
END IF;
END IF;

然而,有几种情况并不需要。然后一个更好的方法是使用接近通常switch语句的东西。

相关主题:

  1. PostgreSQL IF statement

2 个答案:

答案 0 :(得分:2)

为了模仿switch语句,将开关值直接放在“WHEN”之前的“CASE”之后。每个when语句都会检查它的值是否等于CASE值。

使用专门的case语句返回颜色词的十六进制颜色值的示例:

DO $$ 
DECLARE
  test_color varchar;
  hex_color varchar;
BEGIN
  test_color := 'blue';
  hex_color :=
    CASE test_color
      WHEN 'red' THEN
        '#FF0000'
      WHEN 'blue' THEN
        '#0000FF'
      WHEN 'yellow' THEN
        '#FFFF00'
      ELSE --we do not use that color, replace with white
        '#FFFFFF'
    END;
END $$

我无法在我的计算机上测试匿名块,所以这是一个我测试过的直接SQL语句,可用于匿名块:

SELECT
    CASE 'blue'
      WHEN 'red' THEN
        '#FF0000'
      WHEN 'blue' THEN
        '#0000FF'
      WHEN 'yellow' THEN
        '#FFFF00'
      ELSE --we do not use that color, replace with white
        '#FFFFFF'
    END;

答案 1 :(得分:0)

带有anonymous code block程序块的PL / pgSQL CASE的基本/基本结构是:

DO $$ BEGIN
    CASE
        WHEN boolean-expression THEN
          statements;
        WHEN boolean-expression THEN
          statements;
        ...
        ELSE
          statements;
    END CASE;
END $$;

参考文献:

  1. http://www.postgresql.org/docs/current/static/sql-do.html
  2. https://www.postgresql.org/docs/current/static/plpgsql-control-structures.html