Postgresql 插入函数在另一个函数内部调用时不起作用?

Postgresql 插入函数在另一个函数内部调用时不起作用?,postgresql,Postgresql,我有一个奇怪的事情发生了。我在PostgreSQL(V9.1.10)中创建了一个插入函数。当我直接从PGSQL命令行调用该函数时,它工作正常 但是,当我从另一个函数调用insert函数时,它不会执行insert。最令人沮丧的是它甚至没有返回错误。这就好像它只是跳过insert语句,但前提是它是从另一个函数调用的。直接调用,它就像一个符咒。我已经检查了(从函数中)传入的变量,那里似乎没有任何问题,事实上我可以使用“raisenotice”来显示为insert语句传入的参数。非常令人沮丧。我已经在董

我有一个奇怪的事情发生了。我在PostgreSQL(V9.1.10)中创建了一个插入函数。当我直接从PGSQL命令行调用该函数时,它工作正常

但是,当我从另一个函数调用insert函数时,它不会执行insert。最令人沮丧的是它甚至没有返回错误。这就好像它只是跳过insert语句,但前提是它是从另一个函数调用的。直接调用,它就像一个符咒。我已经检查了(从函数中)传入的变量,那里似乎没有任何问题,事实上我可以使用“raisenotice”来显示为insert语句传入的参数。非常令人沮丧。我已经在董事会上搜罗了很多想法……但最终还是落空了。以下是insert语句:

INSERT INTO insert_table (adp_batch_id, adp_account_id, week_start_date, week_end_date, created_date, modified_date, created_by, modified_by)
  SELECT i_insert_batch_id
        , adpa.adp_account_id
        , d_week_begin_date::timestamp
        , d_week_end_date::timestamp
        , now()::timestamp as created_date
        , now()::timestamp as modified_date
        , '9999999'::bigint as created_by
        , '9999999'::bigint as modified_by
  FROM adp_accounts adpa WHERE adpa.code = cAccount_name;

提前感谢…

您是否检查了是否在流程结束时回滚而不是提交?在这里发布这两个函数,这样我们就可以看到你在做什么……我不能因为发布太多代码(即与工作相关的代码)而冒被私刑的风险。英雄联盟不过,我会尝试一条更简单的路线,看看运气如何。我很确定这和类型转换有关。作为PGSQL的新手,这是我面临的最大挑战之一。如果其中的select语句返回nada,它将不会插入任何内容。您需要弄清楚为什么select没有返回任何内容。在任何情况下,你都不会因为发布重现问题所需的代码而被处以私刑——当然,除非你发布应用程序的全部代码,而不是将其简化为“使其无法工作所需的代码”。谢谢Denis!显然,还有一个更大的问题。有着深厚的MSSQL背景,我仍然习惯于PGSQL的行为。结果表明错误在另一个函数中。我不知道的是,如果我有一个错误,没有一个DML语句被提交。因此insert语句确实起了作用。但是,insert语句之后的错误阻止了insert的提交(如果有意义的话)。一旦我解决了那个错误。insert语句起作用了!错误是,我调用了我的一个函数,该函数使用select语句返回了一个空值:select myfunction(),但由于它没有返回值,因此导致了错误,从而阻止提交我以前的insert语句。但是,一旦我将其更新为:PERFORM myfunction(),一切都正常了。:-)