我正在學習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這樣的驅動程序實現的參數。 –