2

Postgres を使用して単純な関数をコーディングしましたが、次の結果が得られます。

エラー: "$2" またはその付近で構文エラーが発生しました。

基礎となるデータベースは ParAccel で、私は Postgres と ParAccel の両方を初めて使用します。IDE として TOAD Data Point を使用しています。

CREATE OR REPLACE FUNCTION GET_NEXT_SURR_KEY(I_SCHEMA_NM VARCHAR, I_TABLE_NM VARCHAR,I_COLUMN_NM VARCHAR,I_POSNEG_FLAG VARCHAR) 
RETURNS BIGINT
LANGUAGE PLPGSQL
AS $body$
DECLARE
    O_RET_VALUE BIGINT := 0;
    V_DYN_SQL VARCHAR(2000) := '';
BEGIN
    IF I_POSNEG_FLAG = 'P' THEN
       V_DYN_SQL := 'SELECT MAX(' || I_COLUMN_NM || ') + 1 FROM ' || I_SCHEMA_NM || '.' || I_TABLE_NM;

    ELSE
       V_DYN_SQL := 'SELECT MIN(' || I_COLUMN_NM || ') - 1 FROM ' || I_SCHEMA_NM || '.' || I_TABLE_NM;
    END IF;

    EXECUTE V_DYN_SQL INTO O_RET_VALUE;

    RETURN O_RET_VALUE;
END $body$

関数を実行するために次のコマンド例を使用しています。

{CALL GET_NEXT_SURR_KEY('some_schema_name','some_table_name','some_column_name','P')};

誰が私がどこを台無しにしているのか教えてもらえますか?

前もって感謝します。

4

2 に答える 2

0

馬を信頼し、シーケンスを使用してください。OLAP 環境にいるため、一意性違反が発生する可能性はほとんどありませんが、これが通常の Web サイトである場合、同じ ID が頻繁に 2 回取得されます。あなたの機能に関しては、それは完全にうまく機能します-私のデータベースのランダムテーブルでテストしましたが、エラーは発生しなかったので、TOADの障害を探してください。

于 2014-04-11T22:58:21.370 に答える