2016-01-09 4 views
1

У меня проблема с функциями Postgresql. Я хочу объявить функцию, которая будет вставлять одну строку в таблицу, и возвращать мне эту строку (но с автоматически создаваемыми полями, такими как Id).Postgresql INSERT RETURNING complex type

CREATE OR REPLACE FUNCTION UserCreate(
    name character varying(80), 
    surname character varying(80), 
    age int, 
    email character varying(80) 
) 
RETURNS "Users" AS $$ 
BEGIN 
INSERT INTO "Users" 
    (name,surname,age,email) VALUES 
    (name, surname, age, email) RETURNING 
    * AS result; 
END; 
$$ LANGUAGE 'plpgsql' 

, но когда я пытаюсь создать эту функцию я получаю сообщение об ошибке:

Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING. 

I судимой найти некоторые примеры на RETURNING пункте, но все примеры были только с использованием основных типов возвращаемых как целое.

ответ

1

Вы можете использовать переменную для отправки результатов между insert ... returning и return. Что-то вроде:

CREATE OR REPLACE FUNCTION UserCreate(
    name character varying(80), 
    surname character varying(80), 
    age int, 
    email character varying(80) 
) 
RETURNS "Users" AS $$ 
DECLARE 
    result "Users"; 
BEGIN 
INSERT INTO "Users" 
    (name,surname,age,email) 
    VALUES (name, surname, age, email) 
    RETURNING * INTO result; 
RETURN result; 
END; 
$$ LANGUAGE 'plpgsql'; 
+0

Я пробовал аналогичное решение, но оно не работает. Я думаю, что проблема в том, что я объявляю, что возвращаю одну строку, а 'result' может содержать набор строк. Я также попробовал 'LIMIT 1', но это не помогает –

+0

Вышеупомянутые работы для меня, и это должно сработать для вас. Какое сообщение об ошибке вы получаете? – Andomar

+0

ОК, моя вина. Я попытался создать функцию с помощью pgAdmin, но она работала с консоли. Изучит, почему –