2012-02-05 85 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