2

この関数呼び出しが「結果」を返さない理由はありますか?

CREATE OR REPLACE FUNCTION myfunction (input int, OUT result int) AS $$

result = mymodule.object(input,plpy)
plpy.info(" ========= EXTRA-module result: ===",result)

$$ LANGUAGE plpythonu;

===mymoduleのコンテンツ============

def object(input,plpy):
  import StringIO
  try:
   plan = plpy.prepare("INSERT INTO file VALUES (nextval('primary_sequence'),$1) RETURNING primary_key", ["integer"] )
  except:
   plpy.error(traceback.format_exc())

  try:
   rv = plpy.execute(plan, [ input ])
   result = rv[0]["primary_key"]
   plpy.info(" ========= INTRA-module result: ===",result)
   return result
  except:
   plpy.error(traceback.format_exc())
4

2 に答える 2

1

@ed。OUTの代わりにRETURNS構文は実際には必要ありませんでしたが、あなたの提案は私を答えに導きました。そして、はい、私は本当のダミーのように感じます。これは、他の人に自分の作品をレビューしてもらうことの美しさです。

戻り結果を追加すると、うまくいきます。ここで私が行った重要な仮定は、result =構文は、呼び出し元の関数のスコープ内で実際に戻りを終了しなかったということでした。ドー!

CREATE OR REPLACE FUNCTION myfunction (input int, OUT result int) AS $$

result = mymodule.object(input,plpy)
plpy.info(" ========= EXTRA-module result: ===",result)
# This was the key bit:
return result

$$ LANGUAGE plpythonu;
于 2011-09-22T12:26:15.497 に答える
1

私はplpythonに精通していませんが、それがエラーをスローしていて、それが出力されていないか、チェーンをさらに上に渡されていない場合、あなたは決して知りません.

コマンド ラインでテストしているかどうかはわかりませんが、except ブロックに print ステートメントを入れて、返される代わりにエラーが発生しているかどうかを確認してください。

于 2011-09-21T17:17:09.840 に答える