Externale do realizacji zapytań SQL
Praktyka
Aby ułatwić korzystanie z eksternali zostały stworzone funkcje w języku skryptowym. Korzystanie z nich jest zalecane.
Należy wpierw inlcudować plik utils/sqllib.inc
- w zależności od lokalizacji skryptu trzeba wskazać odpowiednią ścieżkę względną (np. ..\..\..\utils\sqllib.inc
)
Funkcja | Rezultat | Opis |
---|---|---|
|
| Przygotowanie zapytania |
|
| Do listy parametrów |
|
| Do listy parametrów |
query_execute(q_id, sql, params) | err | Wykonuje zapytanie |
query_get_row(q_id) | q_result | Zwraca kolejny wiersz wyniku |
query_get_field(q_result, indx) | value | Zwraca kolumnę indx wiersza wyniku |
|
| Zakończenie zapytania |
[PLIK utils/sqllib.inc] procedure zapytanie begin q_id=query_prepare() if q_id err='SQLPREPARE: pusty rezultat' else sql = 'select fld_rec_type,fld_rec_id,fld_str_type,fld_str_id from tbl_items_raw where fld_kind=:kind and fld_rec_id > :rec_id' params = query_bind_string('', 'kind', 'OT') params = query_bind_int(params, 'rec_id', 1000) err=query_execute(q_id, sql, params) if err q_ok='' while q_ok q_result = query_get_row(q_id) if !q_result rec_type = query_get_field(q_result, 0) rec_id = query_get_field(q_result, 1) str_type = query_get_field(q_result, 2) str_id = query_get_field(q_result, 3) else q_ok='N' endif enddo endif endif end err=sep(err,'. ',query_unprepare(q_id))
Funkcje pomocnicze
Przy budowaniu zapytań, w szczególności skomplikowanych warunków, pomocne mogą być następujące funkcje zdefiniowane w pliku sqllib.inc
Funkcja | Parametry | Opis |
---|---|---|
query_cond_eq(field, value) | field - nazwa pola value - wartość | Zwraca prosty warunek dla równości wartości. Ale zapewnia bezpieczeństwo pod kątem apostrofu w wartości. |
query_cond_in(field, opts) | field - nazwa pola opts - lista opcji w postaci opcja1|opcja2|opcja3| | Zwraca warunek dla wyboru wartości z listy. |
query_cond_date(field, start_date, end_date) | field - nazwa pola typu "date" lub "datetime" start_date - data startowa (wyrażona YYYYMMDD) end_date - data końcowa (wyrażona YYYYMMDD) | Zwraca warunek dla zakresu daty (można go stosować tylko dla pól "date" lub "datetime") Jeśli nie zostanie podana któraś z dat - uznajemy zakres za otwarty z tej strony. |
query_cond_month(field, start_year, start_month, end_year, end_month) | field - nazwa pola typu "date"lub "datetime" | Zwraca warunek dla zakresu daty w miesiącach wyrażonych. |