问题
Can someone politely explain this crazyness?
INSERT INTO "dbo"."UserProfile" ("FirstName")
VALUES('John')
RETURNING "UserProfileId" INTO _UserProfileId;
throws an ambiguous reference error, however this correctly executes:
INSERT INTO "dbo"."UserProfile" ("FirstName")
VALUES('John')
RETURNING "dbo"."UserProfile"."UserProfileId" INTO _UserProfileId;
_UserProfileId
is a declared integer variable. I couldn't find any references to this syntax in the manual or why on earth this would be ambiguous in any way.
回答1:
IN
and OUT
parameters (including columns in RETURNS TABLE
) are visible inside every SQL command in the body of a plpgsql function.
If you have columns of the same name in your query, you have to table-qualify them to make it unambiguous. In your case, the table name would do:
... RETURNING "UserProfile"."UserProfileId" INTO _UserProfileId;
Details in the manual here.
Related:
- How to return result of a SELECT inside a function in PostgreSQL?
- Naming conflict between function parameter and result of JOIN with USING clause
来源:https://stackoverflow.com/questions/39261902/postgresql-insert-returning-into-ambiguous-column-reference