2014-09-12 44 views
1

我想写PostgreSQL中的功能和我得到一个语法错误的如果声明:PostgreSQL的语法错误,如果在一个函数声明

CREATE OR REPLACE FUNCTION getallcampuses(IN a character varying, IN b character varying) 
    RETURNS TABLE(campusid charactervarying, campusname character varying) AS 
$BODY$ 
BEGIN 
if $1 = 'PREK' then 
    SELECT * from "SIS_campus"; 
ELSE 
    BEGIN 
     IF $2 = 'DAll' then 
      SELECT distinct(district_id) || 'ALL' AS CampusID, ' District' AS CampusName 

      UNION 

      SELECT campus_id, name 
      FROM "SIS_campus" 
      WHERE district_name IS NOT NULL 
      order by name; 
     Elsif $2 = 'All' then 

      SELECT campus_id, name 
      FROM "SIS_campus" 
      WHERE district_name IS NOT NULL 
      and isnumeric(name) = 0 
      order by name; 
     end if; 
    END 
end if; 
END 
$BODY$ 
LANGUAGE sql; 

以下是错误:

ERROR: syntax error at or near "if" 
LINE 5: if $1 = 'PREK' then 
     ^
+0

你必须在'否则如果$ 2错别字=“所有” then' – 2014-09-12 16:48:09

+1

感谢包括一个完整的函数体以及确切的错误消息文本。这是非常罕见的,并且被赞赏。 (但是,将来,请将PostgreSQL版本也放在文本中)。 – 2014-09-12 16:52:53

回答

2

函数体是PL/PgSQL,但您声明它为LANGUAGE sql

如果您正在编写PL/PgSQL,请使用LANGUAGE plpgsql

related prior answer