no puedes DECLARE
(globales) variables (hay son soluciones
) ni bucle con SQL simple, con la excepción de CTE recursivos proporcionados por @bma
(que en realidad es iterando sobre filas, no en bucle, estrictamente hablando).
Sin embargo , existe el DO
declaración
para dicho código procesal ad-hoc. Introducido con Postgres 9.0. Funciona como una función única, pero no toma ningún parámetro y no devuelve nada. Puede RAISE
Notices et al, por lo que su ejemplo funcionaría bien:
DO
$do$
DECLARE
_counter int := 0;
BEGIN
WHILE _counter < 10
LOOP
_counter := _counter + 1;
RAISE NOTICE 'The counter is %', _counter; -- coerced to text automatically
END LOOP;
END
$do$
Si no se especifica lo contrario, el idioma en el cuerpo por defecto es plpgsql
. Puede usar cualquier idioma de procedimiento registrado
sin embargo, si lo declara (como:LANGUAGE plpython
).
Postgres también ofrece generate_series()
para generar conjuntos ad-hoc, lo que puede obviar la necesidad de bucles en muchos casos. Pruebe una búsqueda aquí en SO para ver ejemplos.
Además, puede usar el WHERE
cláusula en un data-modification CTE
en SQL simple para bifurcar casos y emular IF .. THEN .. ELSE .. END
...