Запись возвращаемого типа функции PostgreSQL, показывающая ошибку - PullRequest
0 голосов
/ 06 октября 2019

У меня ниже таблица и функция. Функция создана успешно, но когда я вызываю функцию, она показывает ошибку.

create table emp_details(empno int,ename varchar(20),sal numeric(7,2))

insert into emp_details values(101,'John',4500)
insert into emp_details values(101,'david',5000)

CREATE OR REPLACE FUNCTION test_select(IN eno integer)
RETURNS SETOF RECORD AS                                                                                   
$body$
BEGIN
        RETURN QUERY                                                       
        SELECT ename,sal FROM EMP_DETAILS WHERE EMPNO=eno;
END;
$body$
LANGUAGE plpgsql 

функция создана успешно. Но при вызове функции. Она показывает ошибку. мы можем достичь в типе записи?

select test_select(101)

1 Ответ

1 голос
/ 06 октября 2019

Вместо этого используйте returns table, поэтому вам не нужно указывать имена столбцов при использовании функции. И вам не нужен PL / pgSQL для этого, функция language sql гораздо эффективнее, если вы просто хотите обернуть запрос.

CREATE OR REPLACE FUNCTION test_select(IN eno integer)
  RETURNS TABLE (ename text, sal numeric)
AS                                                                                   
$body$
  SELECT ename,sal 
  FROM emp_details
  WHERE EMPNO=eno;
END;
$body$
LANGUAGE sql;

Установить возвращающие функции (независимо от того, определено ли как returns setofили с returns table) необходимо использовать в предложении FROM, поэтому вы должны использовать его следующим образом:

select *
from test_select(101);
...