PostgreSQL if else语法错误

时间:2013-05-27 18:07:53

标签: postgresql if-statement

我尝试在mssql上运行但不运行postgreSQL的查询...

SQL查询是..

IF EXISTS (SELECT * FROM Kategoriler WHERE KategoriId = 119)
    BEGIN 
   SELECT * FROM Kategoriler
    END
    ELSE
   SELECT * FROM Adminler

我搜索了它,我在stackoverflow中找到了

DO
   $BODY$
   BEGIN
        IF EXISTS (SELECT 1 FROM orders) THEN
              DELETE from orders;
        ELSE 
              INSERT INTO orders VALUES (1,2,3);
        END IF;
   END;
   $BODY$

但我不想使用DO或,$ body等...我不想写任何函数或其他等...

我只想在postgreSQL中写if else语句...请帮助我......

3 个答案:

答案 0 :(得分:3)

T-SQL支持一些程序语句,如IF。 PostgreSQL不支持它,所以你不能简单地将你的查询重写为postgres。有时您可以使用Igor的解决方案,有时您可以使用plpgsql(函数),有时您必须修改应用程序并将过程代码从服务器移动到客户端。

答案 1 :(得分:1)

尝试类似

的内容
SELECT * 
FROM Kategoriler
UNION ALL
SELECT * 
FROM Adminler
WHERE NOT EXIST (SELECT * FROM Kategoriler WHERE KategoriId = 119)

仅在KategorilerAdminler具有相同结构时才有效。否则,您需要指定字段列表而不是*

答案 2 :(得分:0)

就我而言,我需要知道是否存在记录。

我不得不写一个函数

CREATE OR REPLACE FUNCTION public.pro_device_exists(vdn character varying)
 RETURNS boolean
 LANGUAGE plpgsql
AS $function$
BEGIN

    IF EXISTS (SELECT 1 FROM tags WHERE device_name = upper(vdn)) THEN
          return true;
    ELSE 
          return false;
    END IF;
END; $function$

然后我可以在我的代码中调用此函数……只是我的一部分代码

            if pro_device_exists(vdn) then
                update tags
                set device_id = 11 where device_id = pro_device_id(vdn) and tag_type=10;            
                update tags
                set device_id = pro_device_id(vdn) where tag_id = vtag_id;
                vmsg = (select 'Device Now set to ' || first_name || ' ' || last_name from tags where tag_id=vtag_id);
                vaction = 'Refresh Device Data';
            else
                vmsg = 'Device is not registered on this system';
                vaction = 'No Nothing';
            end if;