PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Ottieni il risultato dalla query nell'istruzione DO

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 .