2011-06-19 14 views
35

私のコードは次のとおりです。ストア選択クエリの出力は

SELECT column_name 
FROM information.SCHEMA.columns 
WHERE table_name = 'aean' 

それは、テーブルaeanの列名を返します。
は今、私は、配列を宣言している:

DECLARE colnames text[] 

にはどうすればCOLNAMES配列内のセレクト出力を保存することができます。
colnamesを初期化する必要はありますか?

+0

+1、私は正確に同じエラーmessage- ERRORとここに到達:データ・タイプinformation_schema.sql_identifierのための配列型を見つけることができませんでした。 'array_agg(column_name、 '、')' – jerrymouse

答えて

71

2つの方法があります。一つは、集約することです:

SELECT ARRAY(
SELECT column_name 
FROM information.schema.columns 
WHERE table_name = 'aean') 

私はこれがplpgsqlがためである仮定しています:

SELECT array_agg(column_name::TEXT) 
FROM information.schema.columns 
WHERE table_name = 'aean' 

他は、配列コンストラクターを使用することです。その場合、次のように割り当てることができます:

colnames := ARRAY(
SELECT column_name 
FROM information.schema.columns 
WHERE table_name='aean' 
); 
+0

はpostgresで動作しないので、postgresで動作するコードを私に渡すことができますか?エラー:データ型の配列型が見つかりませんでしたinfo_schema.sql_identifier – mitesh

+0

ごめんなさい。無意味なコピーと貼り付けは、3つの呼び出しすべてにarray_agg()が含まれています。私はあなたのPGバージョンを幸せにするために、最初のものをタイプキャストしました。 –

+1

+1ありがとう、まったく同じことを探していた。 – jerrymouse

0

私はまったく同じ問題を抱えていました。デニスによって与えられた解決策のひとつ以上の作業の変更(タイプを指定する必要があります):

SELECT ARRAY(
SELECT column_name::text 
FROM information_schema.columns 
WHERE table_name='aean' 
)