2015-04-04 34 views
-1

我想創建以下函數來檢查是否存在某些東西。它應該返回true或false。我創建了一個觸發器來執行該功能。在任何地方都不起作用/語法錯誤。請幫助!PostgreSQL(SQL)如果否則那麼需要語法

CREATE FUNCTION checkForGPU() RETURNS BOOLEAN AS $approved$ 
    BEGIN 
     IF EXISTS (
      SELECT C.ID 
      FROM Components C, ComputerComponents CC, ComponentType T, Computer PC 
      WHERE CC.ComputerID = C.ID 
      AND CC.ComputerID = PC.ID 
      AND C.Type = T.ID 
      AND T.Name = 'GPU') 
     THEN 
      RETURN TRUE 
     ELSE THEN 
     RETURN FALSE 

    END;  
    $approved$ LANGUAGE plpgsql; 


CREATE TRIGGER checkGPU 
AFTER INSERT OR UPDATE OR DELETE ON ComputerComponents 
EXECUTE PROCEDURE checkForGPU(); 
+1

'ELSE THEN'是不正確的。 – 2015-04-04 16:29:05

+0

我如何正確編寫else語句呢? – 2015-04-04 16:33:08

+0

正確的語法,你可以看到[這裏](http://www.postgresql.org/docs/9.1/static/plpgsql-control-structures.html)。第39.6.2.2節。 – kvorobiev 2015-04-04 16:43:42

回答

2

你的函數可以rewrited更簡單,無需IF-THEN-ELSE語句

CREATE FUNCTION checkForGPU() RETURNS BOOLEAN AS $approved$ 
    BEGIN 
     RETURN EXISTS(
      SELECT C.ID 
      FROM Components AS C, ComputerComponents AS CC, ComponentType AS T, Computer AS PC 
      WHERE CC.ComputerID = C.ID 
      AND CC.ComputerID = PC.ID 
      AND C.Type = T.ID 
      AND T.Name = 'GPU' 
     ); 
    END;  
    $approved$ LANGUAGE plpgsql; 
+0

謝謝,這很有道理。但是,在「END」附近有語法錯誤:https://dl.dropboxusercontent.com/u/7647549/Udklip.PNG – 2015-04-04 16:58:08

+0

其中一個括號是額外的。我糾正了我的答案。 – kvorobiev 2015-04-04 17:00:21

+0

我忘了; (EX)後(...)。請再試一次。 – kvorobiev 2015-04-04 17:02:28

相關問題