Ao atribuir o resultado de uma função ou expressão a uma variável em PL/pgSQL, quando é necessário usar uma SELECT
instrução (subconsulta)?
Isso pode ser apenas meu equívoco do SQL. Eu pensei que tudo deveria estar dentro de um (SELECT ...)
(mesmo que envolvesse apenas calcular um número), por exemplo
$$
DECLARE parts text[];
BEGIN
parts := (SELECT string_to_array(my_str,'_') );
...
$$
mas acabei de descobrir que funciona sem o SELECT
:
parts := string_to_array(my_str,'_');
(É quase como se eu pudesse usar PL/pgSQL como se fosse Pascal.)
Em geral, que tipo de expressões podem ser usadas diretamente sem SELECT
calcular valores ?
Este é apenas um palpite educado.
Parece que o
SELECT
é desnecessário porque já está presente, por exemplo, no implícito aoSELECT ... INTO
qual uma atribuição:=
é equivalente. Da documentação :Um exemplo pode ser mostrado aqui , onde:
também pode ser escrito como
Isso parece possível porque a segunda forma simplificada é equivalente a a
SELECT INTO
em PL/pgSQL:A primeira forma seria equivalente a:
, que tem uma camada redundante
SELECT
que pode ser removida.Por outro lado, quando um implícito
SELECT
não está presente, um explícitoSELECT
parece necessário. Por exemplo, a mesma função não pode ser usada diretamente (ou seja, semSELECT
)se não estiver em uma atribuição a uma variável.
Resposta curta cada expressão é uma instrução select.
https://www.postgresql.org/docs/10/static/plpgsql-expressions.html
Isso significa que você pode ter cláusulas from e similares em atribuições e depois de instruções if.