Gå til innhold

Hvordan loop'e gjennom flere databaser?


Anbefalte innlegg

Jeg trenger å oppdatere en rekke databaser som jeg gjerne vil oppdatere via et script. Strukturen på disse er helt like.

Databasene finner jeg i master..sysdatabases, via feltet 'name'

 

Scriptet ser slik ut foreløpig:

---------------------------------

DECLARE MyDBs CURSOR FOR

SELECT name

FROM master.sysdatabases

WHERE name = '<et eller annet hemmelig kriterie>'

FOR READ ONLY

 

DECLARE @DBname VARCHAR(50)

 

OPEN MyDBs

FETCH NEXT From MyDBs INTO @DBname

WHILE (@@FETCH_STATUS = 0)

BEGIN

--> Her kommer scriptet som skal oppdatere databasen @DBname, som jeg sliter med syntaks

END

---------------------------------

 

Det er altså det som ligge mellom BEGIN og END som jeg ikke vet helt syntaksen på.

Jeg kan vel ikke bruke USE på en deklarert variabel, og ikke vil vel '@DBname..MyTable' vil fungere heller.

 

Noen som kan hjelpe meg her?

 

Alternativet er at jeg kjører scriptet mitt for hver database, men når antall databaser er ca. 100, så vil jeg finne en enklere metode.

Lenke til kommentar
Videoannonse
Annonse

Jeg regner med at dette er en engangsjobb/evt en batch som ikke kjøres så ofte.

 

Jeg ville ha laget dette i enten perl eller php. Dette ser ut som Oracle som jeg ikke er helt stødig i, men logikken bør være slik:

 

Først liste opp alle databaser (i eget script).

 

Parse databasene inn i et array, fjerne de som ikke skal kjøres.

 

Kjør en

foreach ($databases as $database):

$sql = "UPDATE $database.rowname SET yyy=xxx WHERE zzz=æøå".

 

mysql_query("BEGIN TRANSACTION");

mysql_query($sql);

mysql_query("COMMIT");

 

echo "Oppdaterte $database";

 

endforeach;

 

Etter min mening er det sjelden det virkelig lønner seg å lære seg databasespråk(* edit). Det er kun i situasjoner der optimalisering er helt avgjørende jeg ville ha brukt tid på å prøve og feile med en Oracle-prosedyre.

 

Om ikke databasen din er usannsynlig stor, vil en scriptspråk gjøre samme nytten. Det eneste som vil bli sendt til og fra databasen er de tre linjene SQL + resultatet (hvor mange rader som ble oppdatert).

 

(* edit: i betydningen prosedyre/scriptspråk i Oracle/DB2. SQL skal man selvfølgelig lære seg...)

Endret av mathias123
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...