2012-02-05 61 views
4

问:我想在PostgreSQL的测试if语句:如何测试PostgreSQL中的if语句?

IF (SELECT COUNT(*) FROM pg_language WHERE lanname = 'plpgsql') > 0 THEN 
    PRINT 'Good' 
ELSE 
    PRINT 'Bad' 
END IF; 

现在,这将引发在IF错误。

据我所知,这是因为我需要使用plpgsql才能够使用if,print和变量。

到目前为止,我可能还必须使用SELECT而不是打印。

如何在将此语句执行到plpgsql之前切换语言?

我想先测试一下,然后把它放入存储过程。 要使用的变量等

测试代码

编辑:

解决方式:

DO LANGUAGE plpgsql $$ 
    BEGIN 
     IF (SELECT COUNT(*) FROM pg_language WHERE lanname = 'plpgsql') > 0 THEN 
      RAISE NOTICE 'GOOD'; 
     ELSE 
      RAISE NOTICE 'BAD'; 
     END IF; 
    END; 
$$; 
+0

回复:“我想先测试它,然后再将它放入存储过程中”:为什么?当你测试C#代码时,你拒绝创建一个'Main'方法吗? – ruakh 2012-02-05 18:39:39

+0

@ruakh:不,但我拒绝为所有代码(包含所有参数)创建函数,然后每次需要测试一些代码时都必须从主方法调用此函数。 (之后也不得不删除这些功能)。基本上,我想要做的就是运行CREATE LANGUAGE plpgsql;如果它不是脚本开始处的注册语言。但是这似乎不太可能,如果没有if语句...... – 2012-02-05 18:44:24

+0

Postgres中没有'PRINT'语句。而PL/pgSQL始终是从9.0开始创建的。所以你只需要测试它,如果你的目标是以前的版本 – 2012-02-05 19:07:28

回答

9

如果你只是想测试代码片段,而无需通过所有的麻烦会建立和删除功能,那么你可以使用DO

=> do language plpgsql $$ 
    begin 
     -- Yes, I have a table called pancakes in my playpen database. 
     if (select count(*) from pancakes) > 0 then 
      raise notice 'Got some'; 
     else 
      raise notice 'Got none'; 
     end if; 
    end; 
$$; 

您需要9.0+才能使用DO

+0

它只适用于开发,所以9.0+是可以的。 – 2012-02-05 20:02:27

+0

但是,如果你有9.0,没有必要检查plpgsql(因为它是默认安装的)。对于9.0以前的版本,您没有DO statemen.t – 2012-02-05 20:05:40

+0

@a_horse_with_no_name:我认为您专注于错误的事情,查询本身是一种分心,真正的问题隐藏在最后:“测试代码与变量等“。 OP似乎更喜欢'psql'的REPL。 – 2012-02-05 20:10:59