2009-12-14 1 views
7

Я новичок в PostgreSQL и использую инструмент запроса в PGAdmin. Я пытаюсь запустить pgsql-запросы, которые используют переменные, но я не могу получить синтаксис правильно.Ошибка синтаксиса PostgreSQL в PGAdmin

Вот пример запроса, который дает ошибку синтаксиса:

DECLARE 
    num INTEGER; 

BEGIN 

    num := 3; 
    PRINT num; 

END; 

Update:
Хорошо, позвольте мне попытаться объяснить. Я исхожу из фона SQL-сервера. В студию управления я могу открыть окно запроса и поиграть с (T) -SQL-запросами.

Например, я могу написать что-то вроде этого:

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

Я знаю, что это глупый пример, но я просто пытаюсь объявить переменную и сделать что-то с ним. Я пытаюсь ознакомиться с PL/PGSQL.


Update, снова:
Это снова я. Я пытаюсь выполнить скрипт ниже и получить «[ERROR] 7.0-2: синтаксическая ошибка, неожиданный символ». Это значит работать в PGAdmin?

DECLARE 
    num INTEGER; 

BEGIN 

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

END; 
+0

Исходя из/TSQL мира MSSQL, а я столкнулся с той же проблемой , Я очень удивлен, что вы не можете просто писать и запускать одноразовые скрипты PL/PGSQL в PostgreSQL. – Tub

ответ

1

Я понятия не имею, чего вы пытаетесь достичь. PostgreSQL не поддерживает такой синтаксис. Подобные ключевые слова (кроме PRINT!) Находятся в PL/pgSQL, который является процедурным языком для построения FUNCTIONS, а не для написания автономных SQL-запросов.

1

Postgres не поддерживает ничего подобного (yet). psql (официальный клиент командной строки) имеет некоторые рудиментарные сценарии.

Лучшим вариантом для вас является pgAdmin, который уже имеет scripting встроенный.

5

Просто перефразировать и «конкретизировать» то, что говорят другие: встроенные процедуры в PostgreSQL. Существует также no PRINT statement. Вы должны:

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

BEGIN 

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

END; 
$$ LANGUAGE plpgsql; 

SELECT test(); 
+0

Спасибо за ссылку! –

11

Вы можете использовать оператор do.Например:

do $$ 
declare 
    num integer := 10; 
begin 

    RAISE INFO 'VARIABLE: %', num; 

end; 
$$language plpgsql; 

При использовании pgadmin вы должны использовать кнопку Execute Query вместо Execute pdScript, как описано здесь:

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

Документация делать заявления здесь :

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