1

以下のコードは、w_add_ax_extra(1, 'k', 'v')以前は同じエラーを再現するw_add_ax_extra(some_id, kv.k, kv.v)ように変更されていましたが、エラーが発生していますk, v

declare
  kv record;
begin
  -- Lines skipped
  for kv in select * from (select (each(extras)).*) as f(k,v) loop
    raise notice 'key=%,value=%',kv.k,kv.v;
    w_add_ax_extra(1, 'k', 'v');
  end loop;
  -- Lines Skipped
end

構文エラーが発生していますが、何が欠けているのか理解できませんでした

ERROR:  syntax error at or near "w_add_ax_extra"
LINE 1: w_add_ax_extra(1, 'k', 'v')

しかし、私がやればdummy = w_add_ax_extra(1, 'k', 'v')うまくいきます。はい、この関数は整数を返します。しかし、ここに保存する必要はありません。戻り値を保持することは必須ですか?

4

1 に答える 1

7

細かいマニュアルから:

39.5.2. 結果のないコマンドの実行

[...]

式または SELECT クエリを評価して結果を破棄すると便利な場合があります。たとえば、副作用はあるが有用な結果値がない関数を呼び出す場合などです。PL/pgSQL でこれを行うには、PERFORM ステートメントを使用します。

PERFORM query;

鉱山を強調します。次のようなことを言って関数を呼び出すのではなく、またはf();する必要があります。perform f();select f() into ...;

for kv in select * from (select (each(extras)).*) as f(k,v) loop
    raise notice 'key=%,value=%',kv.k,kv.v;
    perform w_add_ax_extra(1, 'k', 'v');
end loop;
于 2012-04-09T04:30:42.927 に答える