non puoi restituire i valori da un DO
dichiarazione. Crea invece una funzione plpgsql.
Esistono diversi modi per definire il tipo di reso con il RETURNING
clausola o con OUT
parametri. Leggi il manuale su CREATE FUNCTION
.
Esistono diversi modi per restituire valori dalla funzione. Leggi il capitolo Ritorno da una funzione nel manuale.
In particolare, poiché stai cercando di restituire intere righe da una tabella, puoi utilizzare il tipo registrato della tabella per la dichiarazione della funzione:
CREATE FUNCTION foo ()
RETURNING SETOF test_log
$func$
BEGIN
IF 'a' = 'a' THEN
RETURN QUERY
SELECT * FROM test_log LIMIT 10;
ELSE
RAISE WARNING $$Didn't work!$$;
END IF;
END
$func$ LANGUAGE plpgsql;
Chiama:
SELECT * FROM foo ();
Oppure prova una ricerca qui su SO. Ho pubblicato molti esempi di codice correlati .
Soluzione alternativa per DO
dichiarazione
Se non è possibile utilizzare una funzione, l'unica soluzione sensata a metà con un'istruzione DO consiste nell'utilizzare una tabella temporanea:
CREATE TEMP TABLE tbl_tmp AS
SELECT * FROM test_log LIMIT 0;
$do$
BEGIN
IF 'a' = 'a' THEN
INSERT INTO tbl_tmp
SELECT * FROM test_log LIMIT 10;
ELSE
RAISE WARNING $$Didn't work!$$;
END IF;
END
$do$ LANGUAGE plpgsql;
SELECT * FROM tbl_tmp;
Le tabelle temporanee vengono eliminate automaticamente alla fine della sessione .