私が期待していたとおり、ソリューションの下には私のために働きました。私の実際のテーブルとして拡張MYTABLEのソリューションを与えるには、より多くの列が含まれています。また、同じ要件を持つ他の人にとっては、より有益です。
カラム:
FileId, StoryId, FileName, FileHref, InsertDate
INSERTストアドプロシージャの入力サンプル値とのparams:
v_StoryId = 5678,
v_FileName = 'File_1.jpg,File_2.pdf,File_3.jpg,File_4.pdf'
v_FileHref = 'www.abc.com/File_1.jpg,www.abc.com/File_2.pdf,www.abc.com/File_3.jpg,www.abc.com/File_4.pdf'
動作するコードブロック:
INSERT INTO MYTABLE
(SELECT NextVal('mytable_fileid_seq')
,v_StoryId
,FileName.regexp_split_to_table
,FileHref.regexp_split_to_table
,LOCALTIMESTAMP
FROM ( select row_number() over() as idx,
i as regexp_split_to_table
from UNNEST(STRING_TO_ARRAY(v_FileName,',')) i
)as FileName
JOIN ( select row_number() over() as idx,
i as regexp_split_to_table
from UNNEST(string_to_array(v_FileHref,',')) i
)as FileHref
ON FileName.idx = FileHref.idx
);
結果:
FileId | StoryId | FileName |FileHref |InsertDate
--------------------------------------------------------------------------------------------
23 | 1234 |File_1.jpg |www.abc.com/File_1.jpg | 2016-12-14 12:11:54.374933
--------------------------------------------------------------------------------------------
24 | 1234 |File_2.pdf |www.abc.com/File_2.pdf | 2016-12-14 12:11:54.374933
--------------------------------------------------------------------------------------------
25 | 1234 |File_3.jpg |www.abc.com/File_3.jpg | 2016-12-14 12:11:54.374933
--------------------------------------------------------------------------------------------
26 | 1234 |File_4.pdf |www.abc.com/File_4.pdf | 2016-12-14 12:11:54.374933
しかし、現在はunnest()と一緒にregexp_split_to_table()を使用していますが、私の場合のようにコンマ区切りの値が30に増えないため、スニペットは大丈夫です。現在、私はpgsqlを初めて使っていますが、誰かがより良い/きちんとした解決策を持っているなら、確かに感謝します。
ありがとう@jcaron解決策の方向を示すためです。
あなたが達成しようとしていることは本当に明確ではありません。あなたは入力の例と、何を得ることを期待していますか?あなたがいくつかのファイル名、いくつかのURL、それぞれのファイル名を取得すれば、私は確信していません...? – jcaron
前述のように、2つのタイプのテキスト入力パラメータを持つ関数があるとします。 param v_FileNameには値 'file1.jpeg、file2.pdf、file3.doc'を含めることができます。同時に、v_FileUrlは 'www.abc.com/file1.jpeg,www.abc.com/file2.pdf,www.file3.doc'を持つことができます。このデータを使用すると、コードは3列をそれぞれの列のそれぞれの値とともに表に挿入する必要があります。 –