我正在創建運行檢查的觸發器,如果它通過,則會引發異常。爲此,我需要使用動態調用,因爲我只將表名稱作爲字符串。我正在使用PostgreSQL,但我無法弄清楚如何執行命令的作品。當我這樣做:PL/PgSQL動態子查詢
CREATE OR REPLACE FUNCTION bleep() RETURNS table(id INT) AS $bleep$
BEGIN
RETURN QUERY EXECUTE 'SELECT (id) from Applicant';
END;
$bleep$ LANGUAGE plpgsql;
SELECT * from bleep();
它完美而我回來的ID從申請表。但是,當我這樣做:
CREATE OR REPLACE FUNCTION bleep() RETURNS BOOLEAN AS $bleep$
BEGIN
IF (EXISTS (EXECUTE 'SELECT (id) from Applicant')) THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END;
$bleep$ LANGUAGE plpgsql;
它告訴我:
ERROR: syntax error at or near "EXECUTE" Position: 87
這僅僅是一個玩具的例子,我提出要弄清楚是如何工作的,我已經閱讀了大量文檔和指南。如果我能弄清楚這個玩具的例子,我可以做出完整的觸發器工作,因爲我試着用硬編碼表名來嘗試。我該如何做這項工作?
無關,但:不要陷入習慣把括號中的列名。雖然'(id)'和'id'是相同的東西,'(a,b)'和'a,b'是非常不同的。 –
你想要測試*完全*。給定表中是否存在名爲'id'的列?或者表中是否有任何行?最好的解決方案取決於這一重要信息。 (和你未申報的Postgres版本。) –