PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Dzielenie ciągu oddzielonego przecinkami w funkcji PL/pgSQL

Blue Star wspomniała już, że istnieje wbudowana funkcja do konwersji ciągu oddzielonego przecinkami na tablicę.

Ale sugerowałbym, aby na początku nie podawać ciągu oddzielonego przecinkami. Jeśli chcesz przekazać zmienną liczbę identyfikatorów, użyj variadic parametr.

Nie musisz również najpierw uruchamiać SELECT, możesz zapytać system, ile wierszy zostało zaktualizowanych po instrukcji 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
$$;

Możesz go użyć w ten sposób:

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

Jeśli z jakiegoś powodu „musisz” przekazać to jako pojedynczy argument, użyj zamiast tego rzeczywistej tablicy:

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

Następnie przekaż to w ten sposób:

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

lub

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Grupuj wartości SQL dla jednej kolumny według innej kolumny

  2. Brak dostępnej przestrzeni buforowej (osiągnięto maksymalne połączenie?) Formularz Postgres EDB Driver

  3. Anonimizacja PostgreSQL na żądanie

  4. Pętla przez daną listę wartości w PL/pgSQL

  5. Fabric i Sudo jako inny użytkownik