MainframeSupports
tip uge 45/2000:

Nogen gange kan det være interessant at få en negativ SQL-kode fra et SQL SELECT kald, for eksempel for at signalere, at man ikke fik nogen rækker returneret. Det er især smart sammen med DSNTIAUL og DSNTEP2, der reagerer på negative SQL-koder ved at give returkode 8 tilbage til JES. Dermed kan man styre den videre afvikling af sit job ud fra om et givet SQL SELECT kald returnerer nogen rækker.

Men hvordan får man et SQL SELECT kald til at gå ned når resultatet foreligger? Jo, man kan prøve med følgende konstruktion:

SELECT CASE COUNT(*) WHEN 0 THEN SUBSTR('',COUNT(*)) ELSE '' END
FROM MY.EMPTY_TABLE

Hvis tabellen MY.EMPTY_TABLE indeholder 0 rækker vil den viste SELECT give en negativ SQL-kode, mens den i alle andre tilfælde vil returnere een række med een kolonne indeholdende en tom streng. Hvis man ønsker en negativ SQL-kode for alt andet end 0 rækker, så bytter man bare om på THEN delen og ELSE delen.

Det behov, man hyppigst har, er at få valideret om en tabel indeholder nogen rækker, der opfylder bestemte betingelser. Så udvider man selvfølgelig bare den viste SELECT med en WHERE. Læg dog mærke til, at metoden kun kan anvendes til at finde ud af om et givet antal rækker (i dette tilfælde 0) returneres. Det konkrete indhold af eventuelle rækker må man finde frem på en anden måde.

Sidste uges tip        Tip oversigten