sql >> Databáze >  >> RDS >> PostgreSQL

Smyčka přes dimenzi pole v plpgsql

Od PostgreSQL 9.1 existuje pohodlné FOREACH :

DO
$do$
DECLARE
   m   varchar[];
   arr varchar[] := array[['key1','val1'],['key2','val2']];
BEGIN
   FOREACH m SLICE 1 IN ARRAY arr
   LOOP
      RAISE NOTICE 'another_func(%,%)',m[1], m[2];
   END LOOP;
END
$do$

Řešení pro starší verze :

DO
$do$
DECLARE
   arr varchar[] := '{{key1,val1},{key2,val2}}';
BEGIN
   FOR i IN array_lower(arr, 1) .. array_upper(arr, 1)
   LOOP
      RAISE NOTICE 'another_func(%,%)',arr[i][1], arr[i][2];
   END LOOP;
END
$do$

Také není žádný rozdíl mezi varchar[] a varchar[][] pro systém typu PostgreSQL. Podrobněji vysvětluji zde.

DO vyžaduje alespoň PostgreSQL 9.0 a LANGUAGE plpgsql je výchozí (takže můžete deklaraci vynechat).




  1. Jak importovat databázi pomocí příkazového řádku

  2. dbms_metadata.get_ddl nefunguje

  3. Jak naformátovat pole bigint na datum v Postgresql?

  4. Existuje způsob, jak definovat pojmenovanou konstantu v dotazu PostgreSQL?