2009-12-14 30 views
7

Ich bin neu in PostgreSQL und verwende das Abfragetool in PGAdmin. Ich versuche pgsql Abfragen auszuführen, die Variablen verwenden, aber ich kann nicht scheinen, die Syntax richtig zu bekommen.PostgreSQL Syntaxfehler in PGAdmin

Hier ist eine Beispielabfrage, die einen Syntaxfehler gibt:

DECLARE 
    num INTEGER; 

BEGIN 

    num := 3; 
    PRINT num; 

END; 

Update:
Ok, lassen Sie mich versuchen und zu erklären. Ich komme aus einem SQL-Server-Hintergrund. Im Managementstudio kann ich ein Abfragefenster öffnen und mit (T) -SQL-Abfragen spielen.

Zum Beispiel kann ich so etwas schreiben:

DECLARE @num INT 
SET @num = 3 
SELECT @num 

Ich weiß, dass dies ein dummes Beispiel ist, aber ich versuche, nur eine Variable zu deklarieren und mit ihm etwas zu tun. Ich versuche mich mit PL/PGSQL vertraut zu machen.


Update wieder:
Es ist wieder mich. Ich versuche das folgende Skript und bekomme ein "[ERROR] 7.0-2: Syntaxfehler, unerwartetes Zeichen". Soll das in PGAdmin funktionieren?

DECLARE 
    num INTEGER; 

BEGIN 

    num := 3; 
    RAISE NOTICE '%', num; 

END; 
+0

aus der MSSQL/TSQL Welt kommend und lief ich in der gleichen Ausgabe . Ich bin sehr überrascht, dass Sie in PostgreSQL nicht nur einmalige PL/PGSQL-Skripte schreiben und ausführen können. – Tub

Antwort

1

Ich habe keine Ahnung, was Sie erreichen wollen. PostgreSQL unterstützt diese Art von Syntax nicht. Ähnliche Schlüsselwörter (außer PRINT ?!) befinden sich in PL/pgSQL, einer prozeduralen Sprache zum Erstellen von FUNCTIONS, nicht zum Schreiben von eigenständigen SQL-Abfragen.

1

Postgres unterstützt nichts dergleichen (yet). psql (der offizielle Befehlszeilenclient) verfügt über einige rudimentäre Skripts.

Die beste Option für Sie ist pgAdmin, die bereits scripting eingebaut hat.

5

einfach neu zu formulieren und „konkretisieren“, was andere sagen: Es gibt keine Inline-Verfahren in PostgreSQL. Es gibt auch keine PRINT-Anweisung. Sie müssen:

CREATE OR REPLACE FUNCTION test() RETURNS void AS $$ 
DECLARE 
    num INTEGER; 

BEGIN 

    num := 3; 
    RAISE NOTICE '%', num; 

END; 
$$ LANGUAGE plpgsql; 

SELECT test(); 
+0

Danke für den Link! –

11

Sie können die Do-Anweisung verwenden.Zum Beispiel:

do $$ 
declare 
    num integer := 10; 
begin 

    RAISE INFO 'VARIABLE: %', num; 

end; 
$$language plpgsql; 

Wenn Sie pgAdmin Sie auf die Schaltfläche Abfrage ausführen statt Execute pdScript verwenden, wie es hier erklärt:

http://postgresql.1045698.n5.nabble.com/PgAmin3-Anonymous-code-block-can-t-be-executed-by-pressing-quot-Execute-PG-script-quot-button-td5771073.html

Die Dokumentation für Anweisungen zu tun ist hier :

http://www.postgresql.org/docs/9.3/static/sql-do.html

Verwandte Themen