Trädvy Permalänk
Medlem
Plats
Örebro
Registrerad
Aug 2007

SQL loopa och arrayer

Hej!

Har lite basic-kompetens i SQL men ska börja med lite mer avancerade grejer tänkte jag.

Hur gör jag om jag vill skapa en INT array och sedan loopa igenom den?

T.ex. jag har en INT med tre värden som jag vill ha i en array så skulle jag vilja göra så här som man gör i programmering:
declare @intarray INT[0] = 100;
declare @intarray INT[1] = 200;
declare @intarray INT[2] = 300;
declare @loop INT = 0;

sedan vill jag loopa:

WHILE @loop < 3
BEGIN
PRINT @intarray[@loop];
SET @loop = @loop + 1;
END

detta vill jag då ska printa:
100
200
300

Hur skulle man göra detta i korrekt SQL? Läste någonstans att man inte jobbar med arrayar utan man får tänka om i tabeller. Vore snällt om någon kunde visa mitt ex ovan på korrekt sätt

Trädvy Permalänk
Medlem
Plats
Västra Frölunda
Registrerad
Maj 2004

Det är sällan jag har haft behov av att loopa på det sätt du beskriver.
Med det sagt så är väl Cursors det jag först kommer att tänka på när jag läser ditt inlägg.

MS-SQL Server: https://msdn.microsoft.com/en-us/library/ms191179.aspx / https://msdn.microsoft.com/en-us/library/ms181441.aspx

MySQL: http://dev.mysql.com/doc/refman/5.7/en/cursors.html

as far as we can tell, the massacre went well...

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jul 2004

Förslagsvis är ju att använda tabeller istället för arrayer. Dock beror det på vad du försöker åstadkomma, samt vilken dialekt av SQL du kör.

Exempel på ditt problem ovan med plpgsql (om du kör PostgreSQL):

CREATE FUNCTION loop_array() RETURNS TABLE (value INT) AS $$ DECLARE my_array INT[3] := array[100, 200, 300]; my_value INT; BEGIN FOREACH my_value IN ARRAY my_array LOOP RETURN QUERY SELECT my_value; END LOOP; END; $$ language plpgsql;

Körning:

test=> SELECT loop_array(); loop_array ------------ 100 200 300 (3 rows)

Efter att ni har läst det här har ni insett att det inte gav något.