Udostępnij przez


Wybieranie gramatyki SQL

Pierwszą decyzją, którą należy podjąć podczas konstruowania instrukcji SQL, jest gramatyka do użycia. Oprócz gramatyki dostępnych w różnych organach standardów, takich jak Open Group, ANSI i ISO, praktycznie każdy dostawca DBMS definiuje własną gramatykę, z których każda różni się nieco od standardu.

Dodatek C: Gramatyka SQL opisuje minimalną gramatykę SQL, którą muszą obsługiwać wszystkie sterowniki ODBC. Ta gramatyka jest podzbiorem poziomu podstawowego SQL-92. Sterowniki mogą obsługiwać dodatkową gramatykę zgodną z poziomami Pośrednim, Pełnym lub Przejściowym FIPS 127-2 zdefiniowanymi przez standard SQL-92. Aby uzyskać więcej informacji, zobacz Minimalna gramatyka SQL w dodatku C: Gramatyka SQL i SQL-92.

Dodatek C definiuje również sekwencje ucieczki zawierające standardową gramatykę dla powszechnie dostępnych funkcji językowych, takich jak sprzężenia zewnętrzne, które nie są objęte gramatyką SQL-92. Aby uzyskać więcej informacji, zobacz Sekwencje ucieczki ODBC w dodatku C: Gramatyka SQL i Sekwencje ucieczki, w tej sekcji.

Wybrana gramatyka wpływa na sposób przetwarzania instrukcji przez sterownik. Sterowniki muszą modyfikować SQL zgodny z SQL-92 oraz specjalne sekwencje zdefiniowane przez ODBC na SQL specyficzne dla systemu DBMS. Ponieważ większość składni SQL jest oparta na co najmniej jednym z różnych standardów, większość sterowników SQL niewiele robi lub wcale nie pracuje, aby spełnić ten wymóg. Często polega tylko na wyszukiwaniu sekwencji ucieczki zdefiniowanych przez ODBC i zastępowaniu ich gramatyką specyficzną dla systemu DBMS. Gdy sterownik napotka gramatykę, która nie rozpoznaje, zakłada, że gramatyka jest specyficzna dla systemu DBMS i przekazuje instrukcję SQL bez modyfikacji źródła danych do wykonania.

W związku z tym istnieją naprawdę dwie opcje gramatyki do użycia: gramatyka SQL-92 (i sekwencje ucieczki ODBC) i gramatyka specyficzna dla systemu DBMS. Spośród tych dwóch, tylko gramatyka SQL-92 jest interoperacyjna, więc wszystkie aplikacje interoperacyjne powinny jej używać. Aplikacje, które nie są możliwe do współdziałania, mogą używać gramatyki SQL-92 lub gramatyki specyficznej dla systemu DBMS. Gramatyki specyficzne dla systemu DBMS mają dwie zalety: mogą wykorzystywać wszystkie funkcje, które nie są objęte programem SQL-92, i są nieznacznie szybsze, ponieważ sterownik nie musi ich modyfikować. Tę ostatnią funkcję można częściowo wymusić, ustawiając atrybut instrukcji SQL_ATTR_NOSCAN, który uniemożliwia sterownikowi wyszukiwanie i zastępowanie sekwencji ucieczki.

Jeśli jest używana gramatyka SQL-92, aplikacja może dowiedzieć się, jak jest ona modyfikowana przez sterownik, wywołując sqlNativeSql. Jest to często przydatne podczas debugowania aplikacji. SQLNativeSql akceptuje instrukcję SQL i zwraca ją po jej zmodyfikowaniu przez sterownik. Ponieważ ta funkcja znajduje się na poziomie zgodności interfejsu podstawowego, jest obsługiwana przez wszystkie sterowniki.