sql >> Base de Datos >  >> RDS >> PostgreSQL

División de cadenas separadas por comas en la función PL/pgSQL

Blue Star ya mencionó que hay una función integrada para convertir una cadena separada por comas en una matriz.

Pero sugeriría no pasar una cadena separada por comas para empezar. Si desea pasar un número variable de ID, use un variadic parámetro.

Tampoco necesita ejecutar primero un SELECT, puede preguntarle al sistema cuántas filas se actualizaron después de la instrucción 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
$$;

Puedes usarlo así:

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

Si por alguna razón "tiene" que pasar esto como un solo argumento, use una matriz real en su lugar:

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

Luego pásalo así:

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

o

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