2016-07-08 3 views
0

Я пытаюсь создать функцию с результатом конкатенированного значения.POSTGRESQL: Результат функции с значением Concat

смотри ниже:

CREATE OR REPLACE FUNCTION select_name() 
RETURNS TABLE(name text) AS 
$BODY$ 

BEGIN 
RETURN QUERY 

select 
cast(first_name as text) ||' ' || cast(middle_name as text) ||' ' || cast(last_name as text) as name 
from table_name; 

END; 
$BODY$ 
LANGUAGE plpgsql VOLATILE 
COST 100 
ROWS 1000; 

Однако при запросе

select * from select_name(); 

он показывает сообщение об ошибке:

ERROR: relation "select_name" does not exist 
LINE 8: select * from select_name 
       ^
********** Error ********** 

ERROR: relation "select_name" does not exist 
SQL state: 42P01 
Character: 159 

Я застрял здесь. Пожалуйста, помогите.

+1

Ваша функция работает для меня ... Сообщение об ошибке выглядит так, как в запросе были указаны круглые скобки. Я также подозрительно отношусь к 'LINE 8' и' Character: 159'. Возможно, вы опустили некоторые детали, которые могли бы прояснить проблему. Кстати: '' firstname '|| NULL NULL'. –

+2

Я согласен с Laurenz: кажется, вы забыли использовать '()' и просто запустили 'select * from select_name'. Unrelated, но: ваше выражение в функции может быть упрощено для 'select concat_ws ('', first_name, middle_name, last_name) как name', чтобы правильно обрабатывать значения« null »(плюс: вам не нужен PL/pgSQL для этого , простой SQL-функции будет достаточно) –

+0

Спасибо всем. :) Я просмотрел его снова и сделал некоторые корректировки, и это сработало! Я использовал это: 'cast (first_name || '' || middle_name || '' || last_name как текст) как name' – fLen

ответ

0

Я попытался использовать инструкцию ниже, и это сработало.^_^

select 
cast(first_name ||' ' || middle_name ||' ' || last_name as text) as name 
from table_name; 
0

Попробуйте это, это пойдет как муха.

CREATE OR REPLACE FUNCTION select_name() 
RETURNS TABLE(name text) AS 
$$ 

BEGIN 
RETURN QUERY 

select 
select 
cast(first_name as text) ||' ' || cast(middle_name as text) ||' ' || cast(last_name as text) as name 
from table_name; 

     END; 
$$ LANGUAGE plpgsql; 
Смежные вопросы