2013-06-12 5 views
0

Я прочитал PostgreSQL control structure page, и я решил сделать тест:Неожиданное IF (в END IF), если заявление

IF 1 = 0 THEN 
    INSERT INTO my_table (num_a, num_b) 
    VALUES (1, 1); 
END IF; 

Я проверил заявление вставки в одиночку, и он прекрасно работает. Но когда я запускаю приведенный выше код в psql я получаю:

ERROR: syntax error at or near "IF" 
LINE 1: END IF; 
      ^

Что с ней?

+0

Опубликовать всю функцию, так как вы почти наверняка ошиблись до этой строки, которая приводит к головокружению парсера. –

+0

@Denis, это ** - ** в целом * функция *. Это единственные строки, которые я выполняю. – user2478925

+0

Вы не можете выполнить 'if' без функции (или, по крайней мере,' DO') –

ответ

4

За свой комментарий, вы, вероятно, отсутствует делать блок:

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

DO $$ 
BEGIN 
    IF 1 = 0 THEN 
    INSERT INTO my_table (num_a, num_b) 
    VALUES (1, 1); 
    END IF; 
END; 
$$ language plpgsql; 

Или положить его в function.

+0

Кажется, работает. Надо проверить это немного. Разве нет способа сделать это в * чистом SQL *? – user2478925

+1

Нет, в Postgres нет никакого способа сделать этот материал из процедурного языка. Кстати, страница документов, на которую вы указывали, была около plpgsql - одного из многих процедурных языков. –

+0

Что вы на самом деле хотите сделать в чистом SQL? Поскольку этот пример кода фактически ничего не делает, поскольку 1! = 0. Вы можете делать операторы CASE по результатам или предложения WHERE, чтобы ограничить то, что вы вставляете в таблицу ... INSERT INTO MYTABLE (1,1) WHERE 1 = 0 для псевдо- пример. – Chipmonkey