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

我对 plpython 不熟悉,但如果它抛出错误并且没有被打印出来或进一步传递给你永远不会知道的链。

我不知道您是否正在使用命令行进行测试,但请尝试在您的 except 块中放置一条打印语句,以查看它是否只是出错而不是返回。

于 2011-09-21T17:17:09.840 回答
1

@ed。实际上并不需要 RETURNS 语法而不是 OUT,但您的建议让我得到了答案。是的,我觉得自己像个假人。这就是让别人审查自己的工作的美妙之处。

添加返回结果后,一切顺利。我在这里所做的关键假设是 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 回答