pl/pgsqlでカスタム関数を作成しましたが、入力は配列のみです。私はこのカスタム関数の入力としてクエリの結果を使用したいと思いますが、それを正しく得ることはできません。私は例として単純な関数を使用し、入力として使用しようとしているものより単純なクエリを使用します。カスタム関数の配列パラメータ(入力)としてSQLクエリを使用します。
関数定義:
CREATE OR REPLACE FUNCTION bigger_than_ones(input_array int[])
returns SETOF int
AS
$$
DECLARE
array_item int;
BEGIN
FOREACH array_item in ARRAY input_array
LOOP
IF array_item > 1 THEN
RETURN NEXT array_item;
END IF;
END LOOP;
END
$$ LANGUAGE plpgsql;
私は、列配列のデータ型の同じデータ型を持つテーブルを持っています。この場合、整数列:
SELECT * FROM my_table;
id | int_attribute
---+--------------
1 | 2
2 | 3
3 | 1
4 | 4
5 | 1
6 | 6
7 | 1
8 | 1
9 | 8
このデータ型の列を関数の入力として返すクエリを使用したいと思います。私は運がなくて、これのいくつかのバリエーションを試してみた:
SELECT * FROM bigger_than_ones(SELECT int_attribute FROM my_table);
を返すには:
result
-------------
2
3
4
6
8
私がマージされた時間を結果として計算する必要があるので、私は同様の構成機能を使用している理由は、範囲(カスタムタイプ)を複数のテーブルから、私のコードの複数の場所に配置します。私の最善の考えは、どこから取得したかに関係なく、すべての時間範囲を入力として使用する関数を作成することでしたので、毎回より複雑なクエリを作成する必要はありませんでした。
私が紛失していると思うことはありますか?
クエリで達成しようとしていることがわかりません。あなたの質問を編集して、そのデータに基づいてサンプルデータと予想される出力を加えてください。 [_Formatted_](http://stackoverflow.com/help/formatting)** text **お願い、[スクリーンショットなし](http://meta.stackoverflow.com/questions/285551/why-may-i-not -upload-images-of-if-ask-a-question/285557#285557) –
は単純に 'int_attribute>を' my_tableからint_attributeを選択しますか? –
あなたの関数は**配列**を期待しています。単純な整数値を渡すことができる(またはすべきである)のはなぜだと思いますか?なぜあなたはそのようなあなたの機能を定義しましたか? –