2013-06-12 46 views
0

我已阅读并PostgreSQL control structure page我决定做一个测试:意外IF(END中的IF)在if语句

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

我已经单独测试的INSERT语句,它工作正常。但是当我在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。您可以对结果或WHERE子句执行CASE语句以限制您在表中插入的内容...... INSERT INTO MYTABLE(1,1)WHERE 1 =例。 – Chipmonkey