【问题标题】:INSERT INTO ... RETURNING - ambiguous column referenceINSERT INTO ... RETURNING - 不明确的列引用
【发布时间】:2017-01-08 18:28:28
【问题描述】:

有人可以礼貌地解释一下这种疯狂吗?

INSERT INTO "dbo"."UserProfile" ("FirstName")
VALUES('John')
RETURNING "UserProfileId" INTO _UserProfileId;

抛出一个模棱两可的引用错误,但是这会正确执行:

INSERT INTO "dbo"."UserProfile" ("FirstName")
VALUES('John')
RETURNING "dbo"."UserProfile"."UserProfileId" INTO _UserProfileId;

_UserProfileId 是一个声明的整数变量。我在手册中找不到对这种语法的任何引用,或者为什么这会以任何方式模棱两可。

【问题讨论】:

  • 这是来自 plpgsql 函数定义吗?能否提供一些更完整的sn-ps代码,包括完整的函数定义以及表定义?
  • 是的。它是(大)plpgsql 函数中的一个 sn-p。它也不仅仅是 INSERT 语句,而且这个错误出现在其他函数中以及看似随机的方式。它是否与 RETURNS TABLE() 中定义的列名发生冲突?我无法确定确切原因。
  • 好吧,我无法重现这个。您必须提供一个最小的完整示例。

标签: postgresql sql-insert plpgsql postgresql-9.3


【解决方案1】:

INOUT 参数(包括 RETURNS TABLE 中的列)在 plpgsql 函数体中的每个 SQL 命令中都是可见的。

如果您的查询中有同名的列,则必须对它们进行表限定以使其明确。在您的情况下,表名可以:

... RETURNING "UserProfile"."UserProfileId" INTO _UserProfileId;

Details in the manual here.

相关:

【讨论】:

    猜你喜欢
    • 2016-09-10
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 2010-12-15
    相关资源
    最近更新 更多