Sdílet prostřednictvím


Výběr gramatiky SQL

Prvním rozhodnutím při vytváření příkazů SQL je gramatika, která se má použít. Kromě gramatik dostupných z různých orgánů norem, jako jsou Open Group, ANSI a ISO, prakticky každý dodavatel DBMS definuje vlastní gramatiku, z nichž každá se mírně liší od standardu.

Příloha C: Gramatika SQL popisuje minimální gramatiku SQL, kterou musí podporovat všechny ovladače ODBC. Tato gramatika je podmnožinou vstupní úrovně SQL-92. Ovladače mohou podporovat další gramatiku, aby odpovídaly přechodným, úplným nebo FIPS 127-2 přechodným úrovním definovaným jazykem SQL-92. Další informace naleznete v tématu Minimální gramatika SQL v dodatku C: Gramatika SQL a SQL-92.

Příloha C také definuje escape sekvence obsahující standardní gramatiku pro běžně dostupné jazykové funkce, jako jsou vnější spojení, které nejsou pokryty gramatikou SQL-92. Další informace naleznete v tématu Řídicí sekvence ODBC v dodatku C: Gramatika SQL a řídicí sekvence, dále v této části.

Zvolená gramatika má vliv na to, jak ovladač zpracovává příkaz. Ovladače musí upravit SQL-92 SQL a escape sekvence definované rozhraním ODBC na SQL specifické pro daný DBMS. Vzhledem k tomu, že většina gramatik SQL je založená na jednom nebo několika různých standardech, většina ovladačů tento požadavek nesplňuje. Často se skládá jenom z hledání řídicích sekvencí definovaných rozhraním ODBC a jejich nahrazení gramatikou specifickou pro DBMS. Pokud ovladač zjistí gramatiku, která nerozpozná, předpokládá, že gramatika je specifická pro DBMS a předá příkaz SQL beze změny zdroje dat ke spuštění.

Proto existují opravdu dvě možnosti gramatiky, které se mají použít: gramatika SQL-92 (a řídicí sekvence ODBC) a gramatika specifická pro DBMS. Z těchto dvou je interoperabilní pouze gramatika SQL-92, takže by ji měly používat všechny interoperabilní aplikace. Aplikace, které nejsou interoperabilní, můžou používat gramatiku SQL-92 nebo gramatiku specifickou pro DBMS. Gramatiky specifické pro DBMS mají dvě výhody: Můžou využít jakékoli funkce, které nejsou pokryty SQL-92, a jsou okrajově rychlejší, protože ovladač je nemusí upravovat. Druhou funkci lze částečně vynutit nastavením atributu příkazu SQL_ATTR_NOSCAN, který zastaví ovladač, aby hledal a nahrazoval escape sekvence.

Pokud se používá gramatika SQL-92, může aplikace zjistit, jak je upravena ovladačem voláním SQLNativeSql. To je často užitečné při ladění aplikací. SQLNativeSql přijímá příkaz SQL a vrací ho po změně ovladače. Vzhledem k tomu, že tato funkce je na úrovni souladu s rozhraním Core, podporují ji všechny ovladače.