2016-07-08 429 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 IS NULL'。 –

+2

我同意Laurenz:它似乎忘记了使用'()'并且只是从select_name运行select *。不相关的,但是:函数中的表达式可以简化为'select concat_ws('',first_name,middle_name,last_name)作为name''来正确处理'null'值(Plus:你不需要PL/pgSQL ,一个普通的SQL函数就足够了) –

+0

谢谢大家。 :)我再次审查,并做了一些调整,它的工作!我用这个:'作为名字'将(名字首字母||''||中间名||''||姓氏作为文本)强制转换 – 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;