sql >> Databasteknik >  >> RDS >> PostgreSQL

Slinga över arraydimension i plpgsql

Sedan PostgreSQL 9.1 det finns den praktiska 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$

Lösning för äldre versioner :

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$

Dessutom finns det ingen skillnad mellan varchar[] och varchar[][] för systemet av typen PostgreSQL. Jag förklarar mer i detalj här.

DO uttalande kräver minst PostgreSQL 9.0 och LANGUAGE plpgsql är standard (så att du kan utelämna deklarationen).




  1. Verklig vs flytande poäng vs. pengar

  2. Flera CTE i en enda fråga

  3. Ställ in nyckel-/värdepar i sessionskontexten i SQL Server (sp_set_session_context)

  4. GROUP_CONCAT() Funktion i MySQL