2016-09-01 5 views
0

Может кто-то вежливо объяснить эту сумасшедшую?Postgresql - INSERT RETURNING INTO неоднозначная ссылка на колонку

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

IN и OUT параметры (включая столбцы в RETURNS TABLE) видны внутри каждой команды SQL в теле функции plpgsql.

Если в вашем запросе есть одноименные столбцы, вам необходимо выполнить их проверку, чтобы сделать их однозначными. В вашем случае, имя таблицы будет делать:

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

Details in the manual here.

Related: