2016-07-08 9 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'を実行したようです。無関係ですが、関数内の式を 'ヌル値を適切に扱うためにconcat_ws(' '、first_name、middle_name、last_name)をnameとして選択するように簡略化することができます(Plus:PL/pgSQLは必要ありません、プレーンなSQL関数で十分です) –

+0

ありがとうございます。 :)私はもう一度それを見直し、調整を加えました。私はこれを使用しました: 'cast(first_name || '' || middle_name || '' || last_name as text) – 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;