MainframeSupports
tip uge 2/2011:

I uge 16/2008 skrev jeg om, hvordan det er muligt at lave en SELECT kombineret med en INSERT, så du kan få at vide, hvordan kolonnerne i slutresultatet er blevet udfyldt. I DB2 version 9 blev SELECT udvidet yderligere, så nu er det muligt at kombinere SELECT med UPDATE og SELECT med DELETE.

I en SELECT med UPDATE kan du vælge at få returneret de opdaterede rækker, som de så ud før opdateringen:

SELECT keyCol, col3
FRoM oLD TABLE
( UPDATE myTable SET col3 = col3 * 0.02
  WHERE keyCol >= :keyColValue
)

Det samme eksempel, hvor de opdaterede rækker returneres efter selve opdateringen:

SELECT keyCol, col3
FRoM FINAL TABLE
( UPDATE myTable SET col3 = col3 * 0.02
  WHERE keyCol >= :keyColValue
)

I begge eksempler vil de returnerede værdier i keyCol være de samme, da de ikke er blevet opdateret. Det første eksempel vil returnere de oprindelige værdier i col3, mens det andet eksempel vil returnere de nye værdier i col3. Hvis der havde optrådt en opdatering af en TIMESTAMP kolonne, hvor den nye værdi sættes til CURRENT TIMESTAMP, så kan du altså med ovenstående metode få den aktuelle værdi af CURRENT TIMESTAMP returneret.

Når det kommer til SELECT med DELETE er der kun en mulighed, nemlig at få returneret rækkerne, som de så ud, før de blev slettet:

SELECT keyCol, col3
FRoM oLD TABLE
( DELETE FRoM myTable
  WHERE keyCol >= :keyColValue
)

SELECT med DELETE kan med fordel anvendes, hvis man ønsker at gemme de slettede data på en anden måde end i DB2-loggen, for eksempel for at overføre dem til en anden DB2-tabel. Mulighederne er i hvert fald mange.

Forrige danske tip        Last tip in english        Tip oversigten