sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLの関数を使用して複数の行を挿入する方法

    あなたが持っている機能 むしろ:

    CREATE FUNCTION insertdata(varchar(10),varchar(40)) 
      RETURNS VOID AS 
    $$ 
       INSERT INTO mahasiswa(col_name1, col_name2)
       VALUES ($1,$2); 
    $$ 
    LANGUAGE sql STRICT;
    
    • 言語名を引用しないでください。識別子です。

    • 永続化されたステートメントを含むターゲットリストを常に提供します。そうしないと、後でテーブル定義を変更すると、関数が予期しない動作をする可能性があります。

    • char(n)は絶対に使用しないでください 、あなたが何をしているのかわからない限り。 textを使用します 。

    複数の行を挿入する 、複合型の配列または同じ数の要素を持つ2つの配列を取ることができます 並行して解き放つ。後者のデモンストレーション:

    CREATE FUNCTION insertdata(_arr1 text[], _arr2 text[]) 
      RETURNS VOID AS 
    $$ 
       INSERT INTO mahasiswa(col_name1, col_name2)
       SELECT unnest(_arr1), unnest(_arr2);
    $$ 
    LANGUAGE sql STRICT;
    

    電話:

    SELECT insertdata ('{1234567890,0987654321}', '{Nahrun,Hartono}');
    

    間違いを防ぐために、plpgsql関数を使用して、両方の配列で要素の数が同じであることを確認したいと思います。 array_length(arr1, 1)を使用します ...

    Postgres9.4以降...

    ...複数の配列を並列に受け入れるunnestの新しいバリアントを導入しました-上記のハックの癖なしで(デフォルトでCROSS JOINになることはありません) )

       INSERT INTO mahasiswa(col_name1, col_name2)
       SELECT * FROM unnest(_arr1, _arr2);  -- must be in FROM list
    



    1. 関数に値の複数のセットまたは配列を渡します

    2. mysqlで特定の値の出現率を取得します

    3. Oracleで単一行データを単一列に変換する方法

    4. 毎回新しい接続を作成せずにPDOデータベースクラスを使用しますか?