Aktualności i artykuły

Opublikowano: 16 kwietnia 2014
Kategoria wpisu: poradnikiprogramowanie

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.

^