Partilhar via


Escolhendo uma gramática SQL

A primeira decisão a tomar ao construir instruções SQL é qual gramática usar. Para além das gramáticas disponíveis nos vários organismos de normalização, como Open Group, ANSI e ISO, praticamente todos os fornecedores de SGBD definem a sua própria gramática, cada uma das quais difere ligeiramente do padrão.

O Apêndice C: Gramática SQL, descreve a gramática SQL mínima que todos os drivers ODBC devem suportar. Esta gramática é um subconjunto do nível de entrada do SQL-92. Os drivers podem suportar gramática adicional para cumprir os níveis de transição Intermédio, Completo ou FIPS 127-2 definidos pelo SQL-92. Para mais informações, consulte Gramática Mínima de SQL no Apêndice C: Gramática SQL e SQL-92.

O Apêndice C também define sequências de escape contendo gramática padrão para características linguísticas comuns disponíveis, como uniões externas, que não são cobertas pela gramática SQL-92. Para mais informações, consulte Sequências de Escape ODBC no Apêndice C: Gramática SQL e Sequências de Escape, mais adiante nesta secção.

A gramática escolhida afeta a forma como o driver processa a afirmação. Os drivers devem modificar SQL-92 e as sequências de escape definidas por ODBC para SQL específico do SGBD. Como a maioria das gramáticas SQL baseia-se num ou mais dos vários padrões, a maioria dos drivers faz pouco ou nenhum esforço para cumprir este requisito. Muitas vezes, consiste apenas em procurar as sequências de escape definidas pelo ODBC e substituí-las por gramática específica do SGBD. Quando um driver encontra gramática que não reconhece, assume que a gramática é específica do SGBD e transmite a instrução SQL sem modificação para a fonte de dados para execução.

Portanto, existem realmente duas escolhas gramaticais a usar: a gramática SQL-92 (e as sequências de escape ODBC) e uma gramática específica para SGBD. Dos dois, apenas a gramática SQL-92 é interoperável, pelo que todas as aplicações interoperáveis devem usá-lo. Aplicações que não são interoperáveis podem usar a gramática SQL-92 ou uma gramática específica do SGBD. Gramáticas específicas de SGBD têm duas vantagens: podem explorar quaisquer funcionalidades não cobertas pelo SQL-92, e são marginalmente mais rápidas porque o driver não precisa de as modificar. Esta última funcionalidade pode ser parcialmente aplicada ao definir o atributo de instrução SQL_ATTR_NOSCAN, que impede o condutor de procurar e substituir sequências de escape.

Se a gramática SQL-92 for utilizada, a aplicação pode descobrir como é modificada pelo driver ao chamar SQLNativeSql. Isto é frequentemente útil ao fazer debug de aplicações. O SQLNativeSQL aceita uma instrução SQL e devolve-a depois de o driver a ter modificado. Como esta função está no nível de conformidade da interface Core, é suportada por todos os drivers.