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.

^