2016-09-01 78 views
0

有人可以禮貌地解釋這種瘋狂嗎?Postgresql - INSERT RETURNING INTO ambiguous column reference

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是聲明的整數變量。我在手冊中找不到任何對此語法的引用,或者爲什麼地球上的這種語法在任何方面都不明確。

+0

這是從PLPGSQL函數定義?你能否提供一些更完整的代碼片斷,包括完整的函數定義以及表定義? – redneb

+0

是的。這是(大)plpgsql函數中的一個片段。這也不僅僅是INSERT語句,而且這個錯誤也出現在其他函數中,並且看起來是隨機的。它是否以某種方式與在RETURNS TABLE()中定義的列名衝突?我無法縮小確切的原因。 –

+0

嗯,我不能重現這一點。你必須提供一個最小的完整例子。 – redneb

回答

1

INOUT參數(包括RETURNS TABLE中的列)在plpgsql函數的主體中的每個SQL命令內都可見。

如果在查詢中有相同名稱的列,則必須對它們進行表格限定,以使其無歧義。在你的情況,表名會做:

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

Details in the manual here.

相關: