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

Få resultat fra forespørgsel i DO-satement

Du kan ikke returnere værdier fra en DO udmelding. Opret en plpgsql-funktion i stedet.

Der er flere måder at definere returtypen med RETURNING klausul eller med OUT parametre. Læs manualen om CREATE FUNCTION .

Der er flere måder at returnere værdier fra funktionen på. Læs kapitlet Tilbageføring fra en funktion i manualen.

Især, da du forsøger at returnere hele rækker fra en tabel, kan du bruge den registrerede type af tabellen til funktionserklæringen:

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;

Ring til:

SELECT * FROM foo ();

Eller prøv en søgning her på SO. Jeg postede mange relaterede kodeeksempler .

Løsning for DO erklæring

Hvis du ikke kan bruge en funktion, er den eneste halvvejs fornuftige løsning med en DO-sætning at bruge en midlertidig tabel:

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;

Midlertidige tabeller slettes automatisk i slutningen af ​​sessionen .



  1. hvordan man vælger alle data, hvis input-array findes og ikke findes i mysql

  2. Konvertering af sekunder til TT:MM:SS

  3. Oracle PLSQL returnerer en række type

  4. SQL Server (localdb)\v11.0 forklaret