Zapytania SQL’a w programach CL – RUNSQL
Zdarza siÄ™, że potrzebujemy uruchomić zapytanie SQL’a wprost z programu w jÄ™zyku CL. Choćby po to by utworzyć tymczasowy plik roboczy w bibliotece QTEMP.
OczywiÅ›cie moglibyÅ›my użyć programu RPG z wbudowanym SQL’em, lub wykorzystać komendÄ™ RUNSQLSTM ale po co zadawać sobie aż tyle trudu by uruchomić proste zapytanie. IBM wyszedÅ‚ naprzeciw naszym oczekiwaniom i od wersji systemu 6.1 mamy możliwość korzystania z nowej komendy nazwanej RUNSQL.
W wersji OS’a 7.1 musimy posiadać DB2 PTF Group SF99701 na poziomie 14 lub wyższym a dla wersji 6.1 DB2 PTF Group SF99601 poziom 25.
Poniższy przykład prezentuje wspomniane już wykorzystanie komendy do utworzenia pliku bazy danych w bibliotece QTEMP.
PGM RUNSQL SQL('Drop table QTEMP/TEST_DB') + COMMIT(*NONE) MONMSG MSGID(SQL9010) RUNSQL SQL('Create table QTEMP/TEST_DB as + (select USER, NAME + from TEST_PF + where USER = ''Szymon'') + with data') + COMMIT(*NONE) ENDPGM
Pierwsze użycie komendy RUNSQL wywoÅ‚uje komendÄ™ SQL’a DROP TABLE sÅ‚użącÄ… do usuniÄ™cia zbioru z biblioteki QTEMP. Ponieważ nie stosujÄ™ zatwierdzania transakcji parametr COMMIT w komendach ustawiony jest na wartość *NONE. JeÅ›li wystÄ…pi bÅ‚Ä…d – plik o podanej nazwie nie istnieje w bibliotece – monitorujemy go za pomocÄ… komunikatu SQL9010. Drugie użycie komendy RUNSQL tworzy plik bazy danych za pomocÄ… wyrażenia CREATE TABLE.
Drugi z przykładów ilustruje możliwość użycia zmiennych w wyrażeniu SQL-a komendy RUNSQL.
PGM DCL VAR(&VALUE) TYPE(*CHAR) LEN(10) VALUE('TEST') DCL VAR(&PARM) TYPE(*CHAR) LEN(100) RUNSQL SQL('Insert into QTEMP/TEST_DB + values(''' *CAT &VALUE *BCAT ''', + ''ABC'')') + COMMIT(*NONE) CHGVAR VAR(&PARM) + VALUE('Delete from TEST_DB + where USER = ''' *CAT &VALUE *BCAT + ''' ') RUNSQL SQL(&PARM) COMMIT(*NONE) ENDPGM
Możemy wykorzystać użycie zmiennych na dwa sposoby. UmieszczajÄ…c je bezpoÅ›rednio w wyrażeniu SQL’a lub tworzÄ…c zmiennÄ… która bÄ™dzie przechowywać caÅ‚Ä… treść zapytania i podstawiajÄ…c jÄ… do komendy RUNQSL.
Nie wszystkie wyrażenia SQL-a można uruchomić za pomocÄ… nowej komendy, ale jej przydatność nie ulega wÄ…tpliwoÅ›ci. Po szczegóły odsyÅ‚am na strony IBM’a.