2017-09-29 6 views
0
CREATE OR REPLACE FUNCTION data.first() 

AS $BODY$ 

DECLARE 

res numeric; 

BEGIN 

PERFORM data.second(5,3,4); 

IF(res > 10)THEN 

something 

ELSEIF(res < 10)THEN 

something else 

END IF 


END; 

$BODY$; 

=========================================どのようにPostgreSQL SQL関数から値を使用するか、適切に返すのですか?

CREATE OR REPLACE FUNCTION data.second(
a numeric, 
b numeric, 
c numeric 
OUT res numeric 
) 
RETURNS numeric 

AS $BODY$ 

DECLARE 


BEGIN 

res = a + b; 

END; 

$BODY$; 

親関数でresを使用するにはどうすればよいですか?

+0

あなたが試したものや読んだものの説明、立ち往生した場所、エラーメッセージなどの未加工コード*以外のものを投稿してみてください。 –

+0

私が達成したいのは基本的なことです。 "second"関数からの戻り値をチェックし、 "second"関数の結果に基づいて "first"関数を実行することができます。 * FROM data.second()をdatとして選択しようとしましたが、Imには結果データの宛先がありません。フォーマットされていないコードに申し訳ありません – Pickles

+0

この場合、エラーメッセージのGoogle検索が参考になりますので、そこから始めてみてください。 plpgsqlのマニュアルで説明したように、 'PERFORM'と' SELECT ... INTO'オプションと 'FOUND'変数を調べてください。 –

答えて

1

はOUTと関数が返すの両方を指定しない:

t=# CREATE OR REPLACE FUNCTION data.second(
a numeric, 
b numeric, 
c numeric, 
OUT res numeric 
) 
AS $BODY$ 
DECLARE 
BEGIN 
res = a + b; 
END; 
$BODY$ language plpgsql; 
CREATE FUNCTION 

あなたは、関数の戻り値を使用しselect into VARを使用し、実行したい場合は、単にその出力を捨てる機能を実行します:

t=# CREATE OR REPLACE FUNCTION data.first() returns text 
AS $BODY$ 
DECLARE 
res numeric; 
BEGIN 
SELECT data.second(5,3,4) INTO res; 
IF(res > 5)THEN 
    raise info 'second returned %',res; 
END IF; 
RETURN 'here is the return'; 
END; 
$BODY$ language plpgsql; 
CREATE FUNCTION 

最終的に:

t=# select * from data.first(); 
INFO: second returned 8 
     first 
-------------------- 
here is the return 
(1 row) 

https://www.postgresql.org/docs/current/static/plpgsql.html

+0

ありがとうございます – Pickles

関連する問題