Informix 4gl – PREPARE – jak pobrać dane z bazy danych Informix SQL
Poznaliśmy już dwie metody pobrania danych z bazy Informix przy pomocy języka 4gl metodę: INTO oraz przy wykorzystaniu cursor i foreach. Czas na trzecią metodę. Będzie ona również oparta na kursorze oraz pętli foreach. Dodatkowo zostanie użyte tutaj: preapre.
Tym razem w naszym przykładzie korzystać będziemy z dwóch tabel: students i score z bazy danych: school.


W naszym programie chcielibyśmy wyświetlić imię i nazwisko studenta oraz jego średnią wartość punktów. W przypadku kiedy któryś ze studentów nie posiada żadnych punktów wyświetlimy 0.00. Średnią wartość punktów pokażemy z dokładnością do dwóch miejsc po przecinku.
Musimy zatem pobrać dane z dwóch tabel, wykorzystamy do tego LEFT JOIN. Wyliczenia średniej uzyskamy przez funkcję AVG, zaś sprawdzenie braku punktów poprzez funkcję NVL w SQL. Gotowy program wygląda następująco:
database school main define x_name char(50), x_surname char(50), x_avg char(12), zapytanie char(250) let zapytanie = "SELECT s.NAME, s.surname, NVL(AVG(p.points),0) FROM students s" let zapytanie=zapytanie clipped, " LEFT JOIN score p ON s.id=p.student_id" let zapytanie=zapytanie clipped, " GROUP BY s.name, s.surname" prepare p_run from zapytanie declare q_students cursor for p_run foreach q_students into x_name, x_surname, x_avg display x_name clipped, " ", x_surname clipped, " ", x_avg using "&.&&"; end foreach end main
Wpierw określamy z jakiej bazy danych będziemy korzystać (database) oraz definiujemy zmienne w sekcji definie. Nasze zapytanie SQL przypisujemy poprzez LET do zmiennej: zapytanie.
Samo zapytanie SQL jest długie i musimy rozbić je na klika linijek, Dokonujemy tego poprzez dopisanie do zmiennej zapytanie dalszej części kodu SQL. Należy przy tym pamiętać o clipped przy każdym dopisywaniu oraz o rozpoczęciu kolejnej linijki z częścią zapytania SQL od spacji.
Przy pomocy prepare przygotowujemy nasz SQL – p_run ze zmiennej zapytanie. Pozostaje już tylko utworzyć kursor q_students i w pętli foreach pobrać wpierw zmienne x_name, x_surname, x_avg, a później je wyświetlić.
Aby wyliczyć średnią wykorzystaliśmy wbudowaną w SQL funkcję AVG. Do sprawdzenia czy zwracana wartość nie przyjmuje wartości null wykorzystaliśmy funkcję z języka Informix SQL – NVL.
Funkcja NVL sprawdza, czy podany w nawiasie pierwszy argument jest wartości null, czy też nie. Jeżeli jest to null to funkcja zwraca wartość drugiego argumentu, jeżeli nie jest to null wtedy funkcja zwraca wartość pierwszego argumentu. Zatem, dla naszego przykładu: NVL(AVG(p.points),0), jeżeli AVG(p.points) jest null wtedy zwróć 0, w przeciwnym wypadku zwróć wartość: AVG(p.points).
Przy wyświetlaniu wykorzystaliśmy clipped oraz using.
Zmienne x_name i x_surname są typu char o długości 50 znków. W przypadku wyświetlenia x_name i braku clipped wyświetlilibyśmy imię studenta uzupełnione na końcu pustymi znakami do długości ciągu 50. Clipped pełni funkcję podobną do trim.
W przypadku zmiennej x_avg zastosowaliśmy using wraz z wartością &.&&. Zdefiniowaliśmy w ten sposób format w jakim wynik zostanie wyświetlony.
Wynik programu:
Joseph New 0.00
John True 4.50
David False 4.00