MainframeSupports
tip uge 50/2009:

Når du skriver SQL-kald i PL/I eller COBOL programmer, gør du det typisk uden at prefixe tabel-navnene med tabellens creator. Det har den fordel, at man kan vente med at bestemme creator til selve BIND-processen og gøre programmerne uafhængige af den brugte creator. Det benytter langt de fleste installationer til at gøre SQL-kaldene miljø-uafhængige. Det er meget få (jeg kender ingen), der skriver SQL-kald med creator på i deres PL/I eller COBOL programmer.

Desværre gør fraværet af creator det svært at kopiere et SQL-kald fra et program og udføre det med SPUFI, QMF eller et lignende værktøj. I mange år har jeg brugt tid på at rette SQL-kald til ved at tilføje creator på alle tabel-navnene. Alternativt har jeg kunnet benytte en SET CURRENT SQLID = '<creator>', men hvis man kan det, så kan man også manipulere tabellens indhold, og det vil ikke være heldigt i et produktionsmiljø. Derfor er der ikke mange steder, man kan gøre dette (med mindre man har SYSADM rettigheder på det pågældende DB2-subsystem).

Faktisk er det muligt at sætte creator uden at skulle have særlige rettigheder med en SET CURRENT SCHEMA = '<creator>'. Når først dette SQL-kald er udført i SPUFI, QMF eller lignende, vil efterfølgende SQL-kald benytte den angivne creator der, hvor der mangler en creator. Det, du måske mangler nu, er at vide, hvilken creator, du rent faktisk skal bruge. Det vil dels afhænge af det miljø, du vil udføre SQL-kaldet mod, og hvilket program, du har "sakset" SQL-kaldet fra. Med disse to oplysninger kan du finde creator med dette SQL-kald:

SELECT QUALIFIER
FROM SYSIBM.SYSPACKAGE
WHERE COLLID = '<miljø>'
AND NAME = '<program>'

Nu er det selvfølgelig ikke sikkert, at man på din installation benytter COLLID til at angive miljø. Miljø kan også styres af DB2-subsystem, så COLLID er det samme uanset miljø. Hvis din installation benytter DBRM'er i stedet for packages (højst usandsynligt), så skal QUALIFIER i stedet findes på SYSIBM.SYSPLAN.

Den sidste forhindring for at udføre et SQL-kald, der er "sakset" fra et program, er host-variabelnavne. Her har jeg endnu ikke fundet nogen smart løsning, så her må du stadig manuelt udskifte host-variablerne med de ønskede værdier. I øvrigt kan du skrive SET SCHEMA = i stedet for SET CURRENT SCHEMA =, og hvis du vil reset'te SCHEMA skal du skrive SET SCHEMA = DEFAULT.

Forrige danske tip        Last tip in english        Tip oversigten