我正在学习postgres的过程中,我已经找到了一个解决这个问题的方法,但是我想问社区如果这样的事情甚至是可能的,也许我的语法刚刚关闭。Postgres如果变量
DO $$ BEGIN
IF :MODIFYBY IS NOT NULL THEN
UPDATE User SET ModifyBy = :MODIFYBY WHERE UserId = :USERID;
UPDATE Profile SET ModifyBy = :MODIFYBY WHERE UserId = :USERID;
END IF;
END $$;
达到或接近接收
语法错误 “:”
为:MODIFYBY是这个SQL参数。
如何测试参数是否为空?
注:运行PostgreSQL的9.6
更新:
有可能我的术语是不正确的。完整的sql语句是这样的
BEGIN;
UPDATE User
SET Email = :EMAIL
,ModifyDate = now() at time zone 'utc'
WHERE
UserId = :USERID;
UPDATE Profile
SET FirstName = :FIRSTNAME
,LastName = :LASTNAME
,ModifyDate = now() at time zone 'utc'
WHERE
UserId = :USERID;
DO $$ BEGIN
IF :MODIFYBY IS NOT NULL THEN
UPDATE User SET ModifyBy = :MODIFYBY WHERE UserId = :USERID;
UPDATE Profile SET ModifyBy = :MODIFYBY WHERE UserId = :USERID;
END IF;
END $$;
COMMIT;
我添加了DO $$ BEGIN和END $$;让IF语句正常工作...
一个函数的例子有在(纯)无SQL IF。但是,您可以将条件添加到WHERE子句中。 – wildplasser
其中是参数定义?我不知道你是否可以使用':'作为参数名称。 –
@wildplasser在匿名块中有IF。我想这个操作会混淆来自像jdbc这样的驱动程序实现的参数。 –