PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Разделяне на низ, разделен със запетая, във функцията PL/pgSQL

Blue Star вече спомена, че има вградена функция за преобразуване на низ, разделен със запетая, в масив.

Но бих препоръчал да не предавате низ, разделен със запетая, като начало. Ако искате да подадете променлив брой идентификатори, използвайте 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо IS NOT NULL е false при проверка на тип ред?

  2. Как да нулирате последователността в postgres и да попълните колоната за идентификатор с нови данни?

  3. Продължавам да получавам връзката за грешка [TABLE] не съществува

  4. PostgreSQL ПОКАЖЕ ТАБЛИЦИ Еквивалент (psql)

  5. Проектиране на база данни с периодични сензорни данни