1
這個問題是關於Postgresql 8.3。if-statement包含條件的字符串
我有一個表中包含像'lastcontact爲空'的條件的字段。在代碼中,我想遍歷這個表,併爲每個記錄,我要檢查「如果條件那麼」,就像這個例子:
FOR myrec IN
SELECT * FROM tabel ORDER BY colorlevel, volgnummer
LOOP
if (myrec.conditie) then
raise notice 'Condition % is true', myrec.conditie;
else
raise notice 'Condition % is false', myrec.conditie;
end if;
END LOOP;
這是我在這個例子中被稱爲「TABEL」表:
ID | Conditie | Colorlevel | Volgnummer | Code | Description
1 | lastcontact is null | 1 | 1 | ... | ...
2 | lastchanged is null | 1 | 2 | ... | ...
3 | lastmodified is null | 1 | 3 | ... | ...
是否可以做我想要的支票?以下錯誤上述結果的代碼:
ERROR: invalid input syntax for type boolean: "lastcontact is null"
包含歐文的函數的結果,新科
我已經使用這個功能:
CREATE OR REPLACE FUNCTION foo(lastcontact timestamptz)
RETURNS void AS
$BODY$
DECLARE
myrec record;
mycond boolean;
BEGIN
FOR myrec IN
SELECT * FROM tabel ORDER BY colorlevel, volgnummer
LOOP
EXECUTE 'SELECT ' || myrec.conditie || ' FROM tabel' INTO mycond;
IF mycond then
RAISE NOTICE 'Condition % is true', myrec.conditie;
ELSE
RAISE NOTICE 'Condition % is false', COALESCE(myrec.conditie, 'NULL');
END IF;
END LOOP;
END;
$BODY$
language 'plpgsql' volatile
cost 100;
我得到此錯誤:
ERROR: column "lastcontact" does not exist
LINE 1: SELECT lastcontact is null FROM tabel
^
QUERY: SELECT lastcontact is null FROM tabel
CONTEXT: PL/pgSQL function "foo" line 9 at EXECUTE statement1
我試圖自己找一個解釋,但無濟於事。顯然它試圖對數據庫運行語句,但它應該理解'lastcontact'是作爲函數參數給出的變量。
這不是一個表定義,但它顯示了三個示例行。如果字段'conditie'包含'lastcontact
Leonard
錯誤消息告訴我們該字段的類型爲「boolean」。所以它可以包含NULL,TRUE或FALSE。沒有別的,特別是不是字符串''lastcontact
該列是一個字符串。我得到了字符串,它應該給我一個'FALSE'的'TRUE'。該字符串包含一個條件。如果我在代碼中說'如果lastcontact
Leonard