MainframeSupports
tip uge 35/2004:

I QMF er det muligt at lave sine helt egne kommandoer. For eksempel har jeg altid været træt af at skrive RESET QUERY hver gang jeg skal slette det SQL kald jeg lige har arbejdet med og gerne vil lave et helt nyt. Det er da ulige lettere at skrive for eksempel RQ som kommando. Det kan man rent faktisk godt selv lave og det endda forholdsvis enkelt.

Hvis du er QMF administrator eller QMF systemprogrammør og vil lave kommandoer, som alle straks kan få glæde af, så kan de oprettes direkte i DB2 tabellen Q.COMMAND_SYNONYMS. I det følgende vil jeg vise, hvordan du som bruger af QMF kan lave dine helt egne kommandoer, som kun gælder for dig. Jeg antager i det følgende, at din QMF session startes op med din user som CURRENT SQLID og USER. Det kan godt være, at det fungerer anderledes, hvis CURRENT SQLID ikke er det samme som USER.

Første trin er at lave din egen kommando tabel. Det gøres lettest med SQL-kaldet CREATE TABLE QMF_COMMANDS LIKE Q.COMMAND_SYNONYMS. Hvis dette ikke virker, så brug QMF-kommandoen DI Q.COMMAND_SYNONYMS og herefter kommandoen SAVE DATA AS QMF_COMMANDS. Den sidste metode giver dig en tabel med samme indhold som den globale kommando tabel, mens den første giver dig en tom tabel (hvis den virker).

Næste trin er at aktivere din egen kommando tabel. Det gøres først med SQL-kaldet UPDATE Q.PROFILES SET SYNONYMS='QMF_COMMANDS' WHERE CREATOR = USER og derefter ved at gå ud af QMF og ind igen, da kommando tabellen loades af QMF ved opstart. Derfor er det ikke nok bare at udstede UPDATE'n. Hvis du får en SQL autorisationsfejl, når du forsøger at udstede SQL-kaldet, så kan du desværre ikke lave din egen kommando tabel. Hvis du får en SQL kode 100, så udsted QMF kommandoen DI PROFILE efterfulgt af en SAVE PROFILE. Det kan godt være, at du lige skal rette en af parametrene i profilen for at du får din egen personlige PROFILE. Hvis SAVE PROFILE virker, så udsteder du UPDATE'n igen og nu bør den virke.

Nu har du fået etableret og aktiveret din kommando tabel. Det er der ikke meget sjov ved med mindre du også laver nogle kommandoer. Det gøres med SQL-kaldet:

INSERT INTO QMF_COMMANDS
(VERB, OBJECT, SYNONYM_DEFINITION, REMARKS)
VALUES
('RQ'
,NULL
,'RUN PROC RQ'
,NULL
);

Kolonnen VERB skal indeholde navnet på kommandoen. Kolonnen OBJECT kan indeholde navnet på en parameter til kommandoen. Kolonnen SYNONYM_DEFINITION indeholder den kommando, der skal udføres, når QMF kommandoen matcher indholdet af kolonnen VERB og eventuelt kolonnen OBJECT. Desværre accepterer QMF ikke andre QMF kommandoer i SYNONYM_DEFINITION end RUN og TSO. For at få ovenstående eksempel til at virke er du altså nødt til at oprette en QMF PROC med navnet RQ. Bemærk, at du altså kan få udført REXX programmer som QMF kommandoer, eksempelvis ved at udfylde SYNONYM_DEFINITION med TSO %MYREXX. Når du har INSERT'et dine kommandoer, så skal du igen huske at forlade QMF og gå ind igen for at få dem aktiveret.

Nu mangler du sådan set bare at få etableret QMF proceduren RQ. Udsted QMF kommandoen RESET PROC og indtast følgende som din QMF PROC:

RESET QUERY
MESSAGE (TEXT = 'OK, this is an empty SQL QUERY panel.'

Herefter udfører du QMF kommandoen SAVE PROC AS RQ. Hvis du udelader linien med MESSAGE, så vil QMF som svar på kommandoen RQ give dig beskeden "OK, your procedure was run" og det er da lidt kedeligt. Nu kan du endelig udføre RQ som en QMF kommando. Hvis det ikke virker, så er det sandsynligvis fordi, at du lige skal ud af QMF og ind igen. Hvis det stadig ikke virker, så skyldes det sandsynligvis, at CURRRENT SQLID og USER ikke er det samme. Det kan du finde ud af med SQL-kaldet SELECT CURRENT SQLID, USER FROM SYSIBM.SYSDUMMY1.

Når du har fået ovenstående til at virke, så er det bare om at finde på flere andre kommandoer. Jeg bruger eksempelvis EQ for EDIT QUERY og X for EXIT. Du har sandsynligvis andre behov og så er det jo bare om at komme i gang. Hvis du arbejder på en installation, hvor du bruger QMF mod mange forskellige DB2 subsystemer, så skal du huske at gentage dette tip for hver eneste subsystem.

Forrige danske tip        Last tip in english        Tip oversigten