5

postgresql 8.4を使用して、関数を作成しようとしていますが、次のようになります。

CREATE OR REPLACE FUNCTION addorupdate( smallint, varchar(7) ) RETURNS void AS
$$
BEGIN
 IF EXISTS (SELECT * FROM consist WHERE slave = $1) THEN
   UPDATE consist SET
    master = $2
    where slave = $1;
 ELSE
   INSERT INTO consist(slave, master) VALUES ( $2, $1 );
 END IF;
END;
$$
LANGUAGE SQL;

ただし、次のように失敗します。

ERROR:  syntax error at or near "IF"
LINE 4:  IF EXISTS (SELECT * FROM consist WHERE slave = $1) THEN

...そして私はその理由を理解するのに多くの時間とカフェインを浪費していて、新鮮な目を持つ人を使って私を助けることができました。

私が何を達成しようとしているのかが明確でない場合:slavesは一意の値の列です。存在する場合は、現在のマスターで更新します。そうでない場合は、INSERTします。

更新: 言語をplpgsqlに変更し、次をスローするようになりました。

ERROR:  language "plpgsql" does not exist

アップデート:

CREATE LANGUAGE plpgsql;

(:解決済み:)

4

1 に答える 1

4

plpgsqlあなたの言語はそうではない必要がありsqlます。

于 2012-10-29T13:48:20.853 に答える