CASE

Uma instrução CASE fornece uma maneira de especificar múltiplas condições.

Para obter mais informações sobre construções de ramificações, consulte Como trabalhar com construções de ramificação.

Sintaxe

Instrução CASE simples:

CASE ( <expression_to_match> )
    WHEN <expression> THEN
        <statement>;
        [ <statement>; ... ]
    [ WHEN ... ]
    [ ELSE
        <statement>;
        [ <statement>; ... ]
    ]
END [ CASE ] ;

Onde:

expression_to_match

A expressão a ser correspondida.

expression

Se o valor desta expressão corresponder ao valor de expression_to_match, então as instruções nesta cláusula serão executadas.

statement

Uma instrução pode ser qualquer uma das seguintes opções:

  • Uma única instrução SQL (incluindo CALL).

  • Uma instrução de fluxo de controle (ex.: instrução de looping ou ramificação).

  • Um bloco aninhado.

Instrução CASE pesquisada:

CASE
    WHEN <boolean_expression> THEN
        <statement>;
        [ <statement>; ... ]
    [ WHEN ... ]
    [ ELSE
        <statement>;
        [ <statement>; ... ]
    ]
END [ CASE ] ;

Onde:

boolean_expression

Se esta expressão avaliar como TRUE, então as instruções nesta cláusula serão executadas.

statement

Uma instrução pode ser qualquer uma das seguintes opções:

  • Uma única instrução SQL (incluindo CALL).

  • Uma instrução de fluxo de controle (ex.: instrução de looping ou ramificação).

  • Um bloco aninhado.

Notas de uso

  • Se mais de um ramo do CASE corresponder à expressão, apenas o primeiro será utilizado.

  • Quando você compara expressões, NULL não corresponde a NULL. Se você deseja testar explicitamente para valores NULL, use IS [ NOT ] NULL.

Exemplos

Este exemplo demonstra uma instrução simples CASE:

CREATE PROCEDURE case_demo_01(v VARCHAR)
RETURNS VARCHAR
LANGUAGE SQL
AS
  BEGIN
    CASE (v)
      WHEN 'first choice' THEN
        RETURN 'one';
      WHEN 'second choice' THEN
        RETURN 'two';
      ELSE
        RETURN 'unexpected choice';
    END;
  END;

Nota: se você estiver usando o SnowSQL ou a interface da Web clássica, use este exemplo (consulte Como usar o Script Snowflake no SnowSQL e na interface da web clássica):

CREATE PROCEDURE case_demo_01(v VARCHAR)
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
    BEGIN
        CASE (v)
            WHEN 'first choice' THEN
                RETURN 'one';
            WHEN 'second choice' THEN
                RETURN 'two';
            ELSE
                RETURN 'unexpected choice';
       END CASE;
    END;
$$
;

Quando você chama este procedimento armazenado, o procedimento produz o seguinte resultado:

CALL case_demo_01('second choice');
+--------------+
| CASE_DEMO_01 |
|--------------|
| two          |
+--------------+

Este exemplo demonstra uma instrução CASE pesquisada:

CREATE PROCEDURE case_demo_2(v VARCHAR)
RETURNS VARCHAR
LANGUAGE SQL
AS
  BEGIN
    CASE
      WHEN v = 'first choice' THEN
        RETURN 'one';
      WHEN v = 'second choice' THEN
        RETURN 'two';
      ELSE
        RETURN 'unexpected choice';
    END;
  END;

Nota: se você estiver usando o SnowSQL ou a interface da Web clássica, use este exemplo (consulte Como usar o Script Snowflake no SnowSQL e na interface da web clássica):

CREATE PROCEDURE case_demo_2(v VARCHAR)
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
    BEGIN
        CASE 
            WHEN v = 'first choice' THEN
                RETURN 'one';
            WHEN v = 'second choice' THEN
                RETURN 'two';
            ELSE
                RETURN 'unexpected choice';
       END CASE;
    END;
$$
;

Quando você chama este procedimento armazenado, o procedimento produz o seguinte resultado:

CALL case_demo_2('none of the above');
+-------------------+
| CASE_DEMO_2       |
|-------------------|
| unexpected choice |
+-------------------+