Argumentos de valor de padrão

Alguns argumentos nas funções de catálogo, como o argumento TableName em SQLTables, aceitam padrões de pesquisa. Esses argumentos aceitarão padrões de pesquisa se o atributo de instrução SQL_ATTR_METADATA_ID estiver definido como SQL_FALSE. Eles são argumentos de identificador que não aceitarão um padrão de pesquisa se esse atributo estiver definido como SQL_TRUE.

Os caracteres do padrão de pesquisa são:

  • Um sublinhado (_), que representa qualquer caractere único.

  • Um sinal de porcentagem (%), que representa qualquer sequência de zero ou mais caracteres.

  • Um caractere de escape, que é específico do driver e usado para incluir sublinhados, sinais de porcentagem e o caractere de escape como literais. Se o caractere de escape vier antes de um caractere não especial, o caractere de escape não terá significado especial. Se o caractere de escape vier antes de um caractere especial, ele fará o escape do o caractere especial. Por exemplo, "\a" seria tratado como dois caracteres, "\" e "a", mas "\%" seria tratado como o caractere não especial único "%".

O caractere de escape é recuperado usando a opção SQL_SEARCH_PATTERN_ESCAPE em SQLGetInfo. Ele deve vir antes de qualquer sublinhado, sinal de porcentagem ou caractere de escape em um argumento que aceite padrões de pesquisa para incluir esse caractere como literal. A tabela a seguir mostra alguns exemplos.

Padrão de pesquisa Descrição
%A% Todos os identificadores que contêm a letra A
ABC_ Todos os quatro identificadores de caracteres que começam com ABC
ABC\_ O identificador ABC_, supondo que o caractere de escape seja uma barra invertida (\)
\\% Todos os identificadores que começam com uma barra invertida (\), supondo que o caractere de escape seja uma barra invertida

É preciso cuidado especial para escapar de caracteres de padrão de pesquisa em argumentos que aceitam padrões de pesquisa. Isso é particularmente verdadeiro para o caractere sublinhado, que costuma ser usado em identificadores. Um erro comum em aplicativos é recuperar um valor de uma função de catálogo e passá-lo para um argumento de padrão de pesquisa em outra função de catálogo. Por exemplo, suponha que um aplicativo recupere o nome da tabela MY_TABLE do conjunto de resultados para SQLTables e passe isso para SQLColumns para recuperar uma lista de colunas em MY_TABLE. Em vez de obter as colunas para MY_TABLE, o aplicativo obterá as colunas para todas as tabelas que correspondem ao padrão de pesquisa MY_TABLE, como MY_TABLE, MY1TABLE, MY2TABLE etc.

Observação

Drivers ODBC 2.x não dão suporte a padrões de pesquisa no argumento CatalogName em SQLTables. Os drivers ODBC 3*.x* aceitam padrões de pesquisa nesse argumento se o atributo de ambiente SQL_ATTR_ ODBC_VERSION está definido como SQL_OV_ODBC3. Eles não aceitam padrões de pesquisa nesse argumento se ele está definido como SQL_OV_ODBC2.

Passar um ponteiro nulo para um argumento de padrão de pesquisa não restringe a busca por esse argumento; ou seja, um ponteiro nulo e o padrão de pesquisa % (qualquer caractere) são equivalentes. Porém, um padrão de pesquisa de comprimento zero (ou seja, um ponteiro válido para uma cadeia de caracteres de comprimento zero) corresponde apenas à cadeia de caracteres vazia ("").