1

テーブル名に基づいて主キーの次の値を返す関数を作成したい:

CREATE OR REPLACE FUNCTION next_pk (_table varchar) RETURNS INTEGER AS $$
    BEGIN
        RETURN EXECUTE 'SELECT COALESCE (MAX (primary_key), 0) + 1 FROM ' || quote_ident (_table) || ' limit 1';
    END;
$$ LANGUAGE plpgsql;

select next_pk ('myTable');

しかし、次のエラーが発生します。

ERROR:  type "execute" does not exist
LINE 1: SELECT EXECUTE 'SELECT COALESCE (MAX (primary_key), 0) + 1 F...

手がかりはありますか?ありがとう。

4

1 に答える 1

1

整数変数と「実行先」が必要です。

CREATE OR REPLACE FUNCTION next_pk (_table varchar) RETURNS INTEGER AS $$
DECLARE
    result integer;    
BEGIN  
    EXECUTE 
        'SELECT COALESCE (MAX (primary_key), 0) + 1 FROM ' || quote_ident (_table) 
        INTO result;
    RETURN result;
END;
$$ LANGUAGE plpgsql;

select next_pk ('myTable');
于 2013-01-31T23:28:02.843 に答える