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

PL/pgSQL関数でコンマ区切りの文字列を分割する

    Blue Starは、コンマ区切りの文字列を配列に変換する組み込み関数があることをすでに述べています。

    ただし、最初にコンマ区切りの文字列を渡さないことをお勧めします。可変数のIDを渡す場合は、variadicを使用します パラメータ。

    また、最初にSELECTを実行する必要はありません。UPDATEステートメントの後に更新された行数をシステムに問い合わせることができます。

    CREATE FUNCTION update_status(p_status text, p_id variadic integer[]) 
      RETURNS character varying
      LANGUAGE plpgsql
    AS
    $$
    DECLARE
      v_row_count bigint DEFAULT 0;
    BEGIN
      UPDATE test
      SET status     = p_status,
          updated_by = 'admin'
      WHERE user_id = any (p_id);
        
      get diagnostics v_row_count = row_count;
      if v_row_count = 0 then 
        return 'User not found';
      end if;
      
      return concat(v_row_count, ' users updated');
    END
    $$;
    

    次のように使用できます:

    select update_status('active', 1);
    select update_status('active', 5, 8, 42);
    

    何らかの理由でこれを単一の引数として渡す必要がある場合は、代わりに実際の配列を使用してください。

    CREATE FUNCTION update_status(p_status text, p_id integer[]) 
    

    次に、次のように渡します:

    select update_status('active', array[5,8,42]);
    

    または

    select update_status('active', '{5,8,42}');
    


    1. 使用されるテーブルタイプは、SPATIALインデックスをサポートしていません

    2. MYSQLデータベースへのランダムな文字の挿入

    3. 空のクラスター化テーブルへのINSERT…SELECTによる最小限のロギング

    4. Oracle 11gで、パーティション表をある表領域から別の表領域に移動するにはどうすればよいですか。