PostgreSql как у создаваемого типа данных получить значение поля?
Создаю свой тип данных
CREATE TYPE student AS ( "firstName" character varying, "secondName" character varying, "age" integer, "status" character varying );
Есть функция change_status(student, old_status, new_status) которая возвращаем student c изменёнными значениями полей
Мне нужно создать функцию которая возвращает поле firstNameиз student
CREATE FUNCTION student_name (IN "currentStudent" student, IN "secondName" character varying)
RETURNS character varying
LANGUAGE 'plpgsql'
AS
BEGIN
RETURN change_status(currentStudent,secondName).firstName;
END;
Но происходит ошибка syntax error около точки, то есть он не понимает блок .firstName. В oracle я так значение полей получать мог а тут нет. Может кто знает как получить из созданного типа данных значение поля?
Ответы (1 шт):
Чтобы читать поле из возвращаемого функцией объекта, надо вызов функции дополнительно оборачивать в скобки (getObject(params)).field
В твоём случае будет
CREATE TYPE student AS ( firstName text, secondName text, age integer, status text);
CREATE OR REPLACE FUNCTION change_status (currentStudent student, secondName text)
RETURNS student AS
$$
BEGIN
RETURN (
SELECT ROW(currentStudent.firstName, secondName, currentStudent.age, currentStudent.status)::student
);
END
$$
LANGUAGE plpgsql;
CREATE FUNCTION student_name(currentStudent student, secondName text) RETURNS text AS
$$
BEGIN
RETURN (
SELECT (change_status(currentStudent,secondName)).firstName
);
END
$$
LANGUAGE 'plpgsql';
select student_name(row('John', 'Smith', 12, 'alive')::student, 'Snow') ;
John