465 Stimmen

Wie man eine Variable in einer PostgreSQL-Abfrage deklariert

Wie deklariere ich eine Variable zur Verwendung in einer PostgreSQL 8.3-Abfrage?

In MS SQL Server kann ich dies tun:

DECLARE @myvar INT
SET @myvar = 5

SELECT *
FROM somewhere
WHERE something = @myvar

Wie kann ich dasselbe in PostgreSQL tun? Laut der Dokumentation werden Variablen einfach als "name type;" deklariert, aber das gibt mir einen Syntaxfehler:

myvar INTEGER;

Kann mir jemand ein Beispiel für die richtige Syntax geben?

3 Stimmen

Es kann nur in PostgreSQL gemacht werden. Siehe die Antwort auf diese verwandte Frage: stackoverflow.com/questions/766657/

3 Stimmen

Diese verwandte Antwort hat bessere Antworten: stackoverflow.com/questions/13316773/

17voto

Es gibt zwar keine anschauliche und eindeutige Möglichkeit, eine Einzelwertvariable zu deklarieren, aber Sie können Folgendes tun

with myVar as (select "any value really")

Um dann auf den in dieser Konstruktion gespeicherten Wert zuzugreifen, müssen Sie

(select * from myVar)

zum Beispiel

with var as (select 123)    
... where id = (select * from var)

11voto

Martin Zinovsky Punkte 3824

Hier ist ein Beispiel mit PREPARE-Anweisungen . Sie können immer noch nicht ? , aber Sie können $n Notation:

PREPARE foo(integer) AS
    SELECT  *
    FROM    somewhere
    WHERE   something = $1;
EXECUTE foo(5);
DEALLOCATE foo;

10voto

The Coder Punkte 4047

In DBeaver können Sie Parameter in Abfragen genauso verwenden wie im Code, also wird dies funktionieren:

SELECT *
FROM somewhere
WHERE something = :myvar

Wenn Sie die Abfrage ausführen, wird DBeaver Sie nach dem Wert für :myvar fragen und die Abfrage ausführen.

4voto

Kemin Zhou Punkte 5151

Hier ist ein Codesegment, das eine einfache Variable in postges terminal verwendet. Ich habe es ein paar Mal benutzt. Aber ich muss einen besseren Weg finden. Hier arbeite ich mit String-Variablen. Wenn man mit Integer-Variablen arbeitet, braucht man keine dreifachen Anführungszeichen. Das dreifache Anführungszeichen wird bei der Abfrage in ein einfaches Anführungszeichen umgewandelt, da man sonst einen Syntaxfehler bekommt. Vielleicht gibt es eine Möglichkeit, die dreifachen Anführungszeichen bei der Arbeit mit String-Variablen zu eliminieren. Bitte aktualisieren Sie, wenn Sie eine Möglichkeit zur Verbesserung finden.

\set strainname '''B.1.1.7'''

select *
from covid19strain
where name = :strainname ;

4voto

Richard Neill Punkte 51

In psql können Sie diese "Variablen" als Makros verwenden. Beachten Sie, dass sie jedes Mal "ausgewertet" werden, wenn sie verwendet werden, und nicht erst dann, wenn sie "gesetzt" werden.

Einfaches Beispiel:

\set my_random '(SELECT random())'
select :my_random;  -- gives  0.23330629315990592
select :my_random;  -- gives  0.67458399344433542

dies ergibt zwei verschiedene antwortet jedes Mal.

Sie können diese jedoch als wertvolle Abkürzung verwenden, um die Wiederholung vieler Unterauswahlen zu vermeiden.

\set the_id '(SELECT id FROM table_1 WHERE name = ''xxx'' LIMIT 1)'

und verwenden Sie es später in Ihren Abfragen als

:the_id 

z.B..

INSERT INTO table2 (table1_id,x,y,z) VALUES (:the_id, 1,2,3)

Beachten Sie, dass Sie die Zeichenketten in den Variablen in doppelte Anführungszeichen setzen müssen, da das Ganze dann in Ihre Abfrage hineininterpoliert (d. h. makroexpandiert) wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X