2017-11-17 18 views
0

文字列を返すPostgreSQL関数があります。この関数を別の関数に使用したいが、エラーが出る。私はこのクエリを実行する場合Postgres:別の関数で文字列を返す関数を使用する

CREATE OR REPLACE FUNCTION public.get_some_string() 

RETURNS text AS 
$func$ 
DECLARE 

BEGIN 

    return 'mystring'; 

END 
$func$ LANGUAGE plpgsql VOLATILE; 

CREATE OR REPLACE FUNCTION public.use_the_string() 

RETURNS boolean AS 
$func$ 
DECLARE 

    mytext text; 

BEGIN 

    mytext := select public.get_some_string(); 

END 
$func$ LANGUAGE plpgsql VOLATILE; 

私はエラーを取得:

これらは、テキストを返しますget_some_string、と私は前のものを呼び出し、結果を変数に格納したいuse_the_stringで、サンプル関数です:

ERROR: syntax error at or near "select" 
LINE 24: mytext := select public.get_some_string(); 

私は間違っていますか?どのようにして最初の関数の戻り値を2番目の関数に使うことができますか?

+0

mytext:=(select public.get_some_string()); –

答えて

3

CREATE OR REPLACE FUNCTION public.use_the_string() 

RETURNS boolean AS 
$func$ 
DECLARE 

    mytext text; 

BEGIN 

    mytext := public.get_some_string(); 

END 
$func$ LANGUAGE plpgsql VOLATILE; 
2

秒1でなければなりません:あなたが選択する必要はありません

RETURNS boolean AS 
$func$ 
DECLARE 

    mytext text; 

BEGIN 

    select public.get_some_string() into mytext; 

END 
$func$ LANGUAGE plpgsql VOLATILE; 

または

mytext := (select public.get_some_string()); 

または

mytext := public.get_some_string(); 
1

他の回答への注意:selectは、plpgsqlコンテキストに暗黙的に追加されています。例:あなたはmytext := select public.get_some_string();を呼び出すとき

do $$ 
declare 
    v text[]; 
begin 
    v := array_agg(datname) from pg_database; 
    raise info 'List of databases: %', v; 
end $$; 

だから、それは内部select select public.get_some_string();に変換されます。

なぜ括弧mytext := (select public.get_some_string());が解決策になるのでしょうか:select (select public.get_some_string());が受け入れられる声明です。

関連する問題