Ich hatte in SQL eine Abfrage nach Postgres, um die Zählung zu erhalten
SELECT COUNT(*) AS count_variable FROM user WHERE something=something;
Als ich ausgeführt habe, gab es die Zählung zurück. Dann wurde diese Abfrage gemäß den Anforderungen in einer Postgres-Funktion benötigt. Als ich diese Abfrage in der Funktion verwendete, antwortete Postgres
FEHLER: Die Abfrage hat kein Ziel für Ergebnisdaten.
TIPP: Wenn Sie die Ergebnisse eines SELECT verwerfen möchten, verwenden Sie stattdessen PERFORM.
KONTEXT: PL / pgSQL-Funktion myfuntion (Ganzzahl, Ganzzahl) Zeile 11 in der SQL-Anweisung
Ich habe nach diesem Fehler gesucht und festgestellt, dass dies passiert, wenn die Abfrage während der Verwendung null zurückgegeben SELECT
hat. Aber ich habe bereits einen Wert erhalten, als ich direkt in der Befehlszeile ausgeführt wurde.
Und auch einige Posts, die angewiesen wurden, es zu verwerfen, sollten wir PERFORM
anstelle von verwenden SELECT
. Meine neue Abfrage innerhalb derselben Funktion war also
PERFORM COUNT(*) AS count_variable FROM user WHERE something=something;
Nachdem diese Funktion funktioniert hat, ist count_variable immer Null. Ich überprüfe es mit Raise nach PERFORM-Abfrage.
raise notice 'count_variable: %', count_variable;
count_variable wird als deklariert
DECLARE
count_variable int;
...
BEGIN
count_variable := 0;
Fehlt etwas oder mache ich etwas falsch oder funktioniert die Funktion COUNT ( ) nicht innerhalb der Funktion ? Wenn count ( ) nicht verfügbar ist, gibt es eine Alternative zum Zählen von Zeilen. Irgendwo, wo ich gesehen habe, @@ROWCOUNT
ist auch eine Variable, um die Zeilenanzahl zu erhalten, aber es gibt einen Fehler.
Hilfe wird sehr geschätzt.
Sie möchten das Ergebnis der Auswahl nicht verwerfen, daher ist die Ausführung die falsche Wahl. Sie möchten das Ergebnis der Abfrage in einer Variablen speichern, daher benötigen Sie eine INTO
Klausel:
DECLARE
count_variable int;
...
BEGIN
SELECT COUNT(*) INTO count_variable
FROM "user"
WHERE something=something;
...
Nur weil Sie der Spalte einen Alias geben, der mit einer Variablen identisch ist, bedeutet dies nicht, dass das Ergebnis in dieser Variablen gespeichert wird. Die Spaltennamen haben keine Beziehung zu Variablen.
Dies alles wird im Handbuch ausführlich erklärt. Insbesondere das Kapitel Ausführen einer Abfrage mit einem einzeiligen Ergebnis
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen