sql >> Database >  >> RDS >> PostgreSQL

Door komma's gescheiden tekenreeks splitsen in PL/pgSQL-functie

Blue Star zei al dat er een ingebouwde functie is om een ​​door komma's gescheiden string om te zetten in een array.

Maar ik zou willen voorstellen om om te beginnen geen door komma's gescheiden tekenreeks door te geven. Als u een variabel aantal ID's wilt doorgeven, gebruikt u een variadic parameter.

U hoeft ook niet eerst een SELECT uit te voeren, u kunt het systeem vragen hoeveel rijen er zijn bijgewerkt na de UPDATE-instructie.

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
$$;

Je kunt het als volgt gebruiken:

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

Als je dit om de een of andere reden "moet" doorgeven als een enkel argument, gebruik dan in plaats daarvan een echte array:

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

Geef het dan als volgt door:

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

of

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


  1. Oracle:SQL-query om alle triggers te vinden die bij de tabellen horen?

  2. Hoe de primaire sleutel te verhogen tijdens postgres COPY batch insert?

  3. Migratiefout in django 2; AttributeError:'str' object heeft geen attribuut 'decode'

  4. Toon alle query's die naar een Oracle-database komen