2016-07-24 8 views
3

PostreSQLストアドプロシージャの変数として整数のリストを格納する方法は不思議です。例えばPostgreSQLで整数のリストを変数として保存する方法

、私はこれらのような文があります。

select A from B where C IN (1,2,3); 
    select A from B where C IN (1,2); 

をそして私は(1,2,3)または(1,2)を格納する変数を宣言します。

だから私はのような文で終わるだろう:(numberList値(1,2,3)を持つ)

select A from B where C in numberList; 

を私が使用すべきデータ型がわからない、Iオンラインで検索して、psqlにリストタイプが見つからない。そしてそれについての構文は何ですか?

答えて

0

PostgresSQL Arrays

Postgresのテーブル内のアレイのための大きいデータ・タイプを有します。あなたはすでにそれを試してみましたか?

+0

を明確に動作していない、私はそれを持って、numberListでどこC、すでに試してみました構文エラー、明らかに配列のようにsthを行うことはできません。 –

+0

@JamesXia: 'any'演算子を使用する必要があります:' c = any(array_variable) 'ですが、PL/pgSQLやSQL _functions_でのみ動作します(SQLには変数がないため) –

0

これはSQLで行うことができます。以下のように定義されたテーブルで:

test=> \d in_clauses 
    Table "laurenz.in_clauses" 
Column | Type | Modifiers 
--------+-----------+----------- 
id  | integer | not null 
list | integer[] | 
Indexes: 
    "in_clauses_pkey" PRIMARY KEY, btree (id) 

test=> SELECT * FROM in_clauses; 
id | list 
----+--------- 
    1 | {1,2,3} 
    2 | 
(2 rows) 

test=> \d searched 
    Table "laurenz.searched" 
Column | Type | Modifiers 
--------+---------+----------- 
id  | integer | not null 
val | integer | not null 
Indexes: 
    "searched_pkey" PRIMARY KEY, btree (id) 

test=> SELECT * FROM searched; 
id | val 
----+----- 
    1 | 3 
    2 | 3 
    3 | 4 
    4 | 1 
    5 | 5 
(5 rows) 

あなたが( "= ANY" ではなく "IN" に使用して)書き込むことができます。

test=> SELECT searched.id 
     FROM searched 
      JOIN in_clauses ON (in_clauses.id = 1) 
     WHERE val = ANY (list); 
id 
---- 
    1 
    2 
    4 
(3 rows) 
関連する問題