Partilhar via


Função SQLProcedureColumns

Conformidade
Versão introduzida: ODBC 1.0 Standards Compliance: ODBC

Resumo
SQLProcedureColumns retorna a lista de parâmetros de entrada e saída, bem como as colunas que compõem o conjunto de resultados para os procedimentos especificados. O driver retorna as informações como um conjunto de resultados na instrução especificada.

Sintaxe

  
SQLRETURN SQLProcedureColumns(  
     SQLHSTMT      StatementHandle,  
     SQLCHAR *     CatalogName,  
     SQLSMALLINT   NameLength1,  
     SQLCHAR *     SchemaName,  
     SQLSMALLINT   NameLength2,  
     SQLCHAR *     ProcName,  
     SQLSMALLINT   NameLength3,  
     SQLCHAR *     ColumnName,  
     SQLSMALLINT   NameLength4);  

Argumentos

StatementHandle
[Entrada] Identificador de instrução.

CatalogName
[Entrada] Nome do catálogo de procedimentos. Se um driver oferecer suporte a catálogos para alguns procedimentos, mas não para outros, como quando o driver recupera dados de diferentes DBMSs, uma cadeia de caracteres vazia ("") indica os procedimentos que não têm catálogos. CatalogName não pode conter um padrão de pesquisa de cadeia de caracteres.

Se o atributo de instrução SQL_ATTR_METADATA_ID estiver definido como SQL_TRUE, CatalogName será tratado como um identificador e seu caso não será significativo. Se for SQL_FALSE, CatalogName é um argumento comum; é tratado literalmente, e o seu caso é significativo. Para obter mais informações, consulte Argumentos em funções de catálogo.

NomeLength1
[Entrada] Comprimento em caracteres de *CatalogName.

SchemaName
[Entrada] Padrão de pesquisa de cadeia de caracteres para nomes de esquema de procedimento. Se um driver oferecer suporte a esquemas para alguns procedimentos, mas não para outros, como quando o driver recupera dados de DBMSs diferentes, uma cadeia de caracteres vazia ("") denota os procedimentos que não têm esquemas.

Se o atributo de instrução SQL_ATTR_METADATA_ID estiver definido como SQL_TRUE, SchemaName será tratada como um identificador e seu caso não será significativo. Se for SQL_FALSE, SchemaName é um argumento de valor padrão; é tratado literalmente, e o seu caso é significativo.

NomeLength2
[Entrada] Comprimento em caracteres de *SchemaName.

ProcName
[Entrada] Padrão de pesquisa de cadeia de caracteres para nomes de procedimentos.

Se o atributo de instrução SQL_ATTR_METADATA_ID estiver definido como SQL_TRUE, ProcName será tratada como um identificador e seu caso não será significativo. Se for SQL_FALSE, ProcName é um argumento de valor padrão; é tratado literalmente, e o seu caso é significativo.

NomeLength3
[Entrada] Comprimento em caracteres de *ProcName.

ColumnName
[Entrada] Padrão de pesquisa de cadeia de caracteres para nomes de coluna.

Se o atributo de instrução SQL_ATTR_METADATA_ID estiver definido como SQL_TRUE, ColumnName será tratada como um identificador e seu caso não será significativo. Se for SQL_FALSE, ColumnName é um argumento de valor padrão; é tratado literalmente, e o seu caso é significativo.

NomeLength4
[Entrada] Comprimento em caracteres de *ColumnName.

Devoluções

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR ou SQL_INVALID_HANDLE.

Diagnóstico

Quando SQLProcedureColumns retorna SQL_ERROR ou SQL_SUCCESS_WITH_INFO, um valor SQLSTATE associado pode ser obtido chamando SQLGetDiagRec com um HandleType de SQL_HANDLE_STMT e um Handle de StatementHandle. A tabela a seguir lista os valores SQLSTATE normalmente retornados por SQLProcedureColumns e explica cada um deles no contexto dessa função; a notação "(DM)" precede as descrições de SQLSTATEs retornados pelo Gerenciador de Driver. O código de retorno associado a cada valor SQLSTATE é SQL_ERROR, salvo indicação em contrário.

SQLSTATE Erro Descrição
01000 Advertência geral Mensagem informativa específica do motorista. (A função retorna SQL_SUCCESS_WITH_INFO.)
08S01 Falha no link de comunicação O link de comunicação entre o driver e a fonte de dados à qual o driver estava conectado falhou antes que a função concluísse o processamento.
24000 Estado do cursor inválido Um cursor estava aberto no StatementHandlee SQLFetch ou SQLFetchScroll havia sido chamado. Este erro é retornado pelo Gerenciador de Driver se SQLFetch ou SQLFetchScroll não retornou SQL_NO_DATA e é retornado pelo driver se SQLFetch ou SQLFetchScroll retornou SQL_NO_DATA.

Um cursor estava aberto no StatementHandle, mas SQLFetch ou SQLFetchScroll não tinha sido chamado.
40001 Falha de serialização A transação foi revertida devido a um impasse de recursos com outra transação.
40003 Conclusão da declaração desconhecida A conexão associada falhou durante a execução dessa função e o estado da transação não pode ser determinado.
HY000 Erro geral Ocorreu um erro para o qual não havia SQLSTATE específico e para o qual nenhum SQLSTATE específico de implementação foi definido. A mensagem de erro retornada por SQLError no buffer de *MessageText descreve o erro e sua causa.
HY001 Erro de alocação de memória O driver não pôde alocar a memória necessária para suportar a execução ou conclusão da função.
HY008 Operação cancelada O processamento assíncrono foi habilitado para o StatementHandle. A função foi chamada e, antes de concluir a execução, SQLCancel ou SQLCancelHandle foi chamada no StatementHandle. Em seguida, a função foi chamada novamente no StatementHandle.

A função foi chamada e, antes de concluir a execução, SQLCancel ou SQLCancelHandle foi chamada no StatementHandle de um thread diferente em um aplicativo multithread.
HY009 Uso inválido de ponteiro nulo O atributo de instrução SQL_ATTR_METADATA_ID foi definido como SQL_TRUE, o argumento CatalogName foi um ponteiro nulo e o SQL_CATALOG_NAME InfoType retorna que os nomes de catálogo são suportados.

(DM) O atributo de instrução SQL_ATTR_METADATA_ID foi definido como SQL_TRUE e o SchemaName, ProcNameou argumento ColumnName era um ponteiro nulo.
HY010 Erro de sequência de função (DM) Uma função de execução assíncrona foi chamada para o identificador de conexão associado ao StatementHandle. Essa função assíncrona ainda estava em execução quando a função SQLProcedureColumns foi chamada.

(DM) SQLExecute, SQLExecDirectou SQLMoreResults foi chamado para o StatementHandle e retornou SQL_PARAM_DATA_AVAILABLE. Esta função foi chamada antes que os dados fossem recuperados para todos os parâmetros transmitidos.

(DM) Uma função de execução assíncrona (não esta) foi chamada para o StatementHandle e ainda estava em execução quando essa função foi chamada.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperationsou SQLSetPos foi chamado para o StatementHandle e retornou SQL_NEED_DATA. Esta função foi chamada antes de os dados serem enviados para todos os parâmetros ou colunas de dados em execução.
HY090 String inválida ou comprimento do buffer (DM) O valor de um dos argumentos de comprimento de nome era inferior a 0, mas não igual a SQL_NTS.

O valor de um dos argumentos de comprimento de nome excedeu o valor de comprimento máximo para o nome de catálogo, esquema, procedimento ou coluna correspondente.
HY117 A conexão é suspensa devido ao estado desconhecido da transação. Apenas as funções de desconexão e somente leitura são permitidas. (DM) Para obter mais informações sobre o estado suspenso, consulte função SQLEndTran.
HYC00 Recurso opcional não implementado Um catálogo de procedimentos foi especificado e o driver ou fonte de dados não oferece suporte a catálogos.

Um esquema de procedimento foi especificado e o driver ou fonte de dados não oferece suporte a esquemas.

Um padrão de pesquisa de cadeia de caracteres foi especificado para o esquema de procedimento, nome do procedimento ou nome da coluna, e a fonte de dados não oferece suporte a padrões de pesquisa para um ou mais desses argumentos.

A combinação das configurações atuais dos atributos de instrução SQL_ATTR_CONCURRENCY e SQL_ATTR_CURSOR_TYPE não era suportada pelo driver ou pela fonte de dados.

O atributo de instrução SQL_ATTR_USE_BOOKMARKS foi definido como SQL_UB_VARIABLE e o atributo de instrução SQL_ATTR_CURSOR_TYPE foi definido como um tipo de cursor para o qual o driver não oferece suporte a favoritos.
HYT00 Tempo limite expirado O período de tempo limite expirou antes que a fonte de dados retornasse o conjunto de resultados. O período de tempo limite é definido através SQLSetStmtAttr , SQL_ATTR_QUERY_TIMEOUT.
HYT01 O tempo limite de conexão expirou O período de tempo limite de conexão expirou antes que a fonte de dados respondesse à solicitação. O período de tempo limite da conexão é definido por meio SQLSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Driver não suporta esta função (DM) O driver associado ao StatementHandle não suporta a função.
IM017 A sondagem está desativada no modo de notificação assíncrona Sempre que o modelo de notificação é usado, a sondagem é desativada.
IM018 SQLCompleteAsync não foi chamado para concluir a operação assíncrona anterior neste identificador. Se a chamada de função anterior no identificador retornar SQL_STILL_EXECUTING e se o modo de notificação estiver habilitado, SQLCompleteAsync deverá ser chamado no identificador para fazer o pós-processamento e concluir a operação.

Observações

Essa função normalmente é usada antes da execução da instrução para recuperar informações sobre os parâmetros do procedimento e as colunas que compõem o conjunto ou conjuntos de resultados retornados pelo procedimento, se houver. Para obter mais informações, consulte Procedimentos.

Observação

SQLProcedureColumns pode não retornar todas as colunas usadas por um procedimento. Por exemplo, um driver pode retornar apenas informações sobre os parâmetros usados por um procedimento e não as colunas em um conjunto de resultados que ele gera.

Os argumentos SchemaName, ProcNamee ColumnName aceitam padrões de pesquisa. Para obter mais informações sobre padrões de pesquisa válidos, consulte Argumentos de valor de padrão.

Observação

Para obter mais informações sobre o uso geral, argumentos e dados retornados de funções de catálogo ODBC, consulte Catalog Functions.

SQLProcedureColumns retorna os resultados como um conjunto de resultados padrão, ordenado por PROCEDURE_CAT, PROCEDURE_SCHEM, PROCEDURE_NAME e COLUMN_TYPE. Os nomes das colunas são retornados para cada procedimento na seguinte ordem: o nome do valor de retorno, os nomes de cada parâmetro na invocação do procedimento (em ordem de chamada) e, em seguida, os nomes de cada coluna no conjunto de resultados retornado pelo procedimento (em ordem de coluna).

Os aplicativos devem vincular colunas específicas do driver em relação ao final do conjunto de resultados. Para obter mais informações, consulte dados retornados por funções de catálogo.

Para determinar os comprimentos reais das colunas PROCEDURE_CAT, PROCEDURE_SCHEM, PROCEDURE_NAME e COLUMN_NAME, um aplicativo pode chamar SQLGetInfo com as opções SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_PROCEDURE_NAME_LEN e SQL_MAX_COLUMN_NAME_LEN.

As colunas a seguir foram renomeadas para ODBC 3.x. As alterações de nome de coluna não afetam a compatibilidade com versões anteriores porque os aplicativos se ligam por número de coluna.

Coluna ODBC 2.0 ODBC 3.x coluna
PROCEDURE_QUALIFIER PROCEDURE_CAT
PROCESSO _OWNER PROCEDURE_SCHEM
PRECISÃO COLUMN_SIZE
COMPRIMENTO BUFFER_LENGTH
ESCALA DECIMAL_DIGITS
RADIX NUM_PREC_RADIX

As colunas a seguir foram adicionadas ao conjunto de resultados retornado pelo SQLProcedureColumns para ODBC 3.x:

  • COLUMN_DEF

  • DATETIME_CODE

  • CHAR_OCTET_LENGTH

  • ORDINAL_POSITION

  • IS_NULLABLE

A tabela a seguir lista as colunas no conjunto de resultados. O condutor pode definir colunas adicionais para além da coluna 19 (IS_NULLABLE). Um aplicativo deve obter acesso a colunas específicas do driver fazendo uma contagem regressiva a partir do final do conjunto de resultados, em vez de especificar uma posição ordinal explícita. Para obter mais informações, consulte dados retornados por funções de catálogo.

Nome da coluna Número da coluna Tipo de dados Observações
PROCEDURE_CAT (ODBC 2.0) 1 Varchar Nome do catálogo de procedimentos; NULL se não for aplicável à fonte de dados. Se um driver oferecer suporte a catálogos para alguns procedimentos, mas não para outros, como quando o driver recupera dados de DBMSs diferentes, ele retorna uma cadeia de caracteres vazia ("") para os procedimentos que não têm catálogos.
PROCEDURE_SCHEM (ODBC 2.0) 2 Varchar Nome do esquema do procedimento; NULL se não for aplicável à fonte de dados. Se um driver oferecer suporte a esquemas para alguns procedimentos, mas não para outros, como quando o driver recupera dados de diferentes DBMSs, ele retornará uma cadeia de caracteres vazia ("") para os procedimentos que não têm esquemas.
PROCEDURE_NAME (ODBC 2.0) 3 Varchar não NULL Nome do procedimento. Uma cadeia de caracteres vazia é retornada para um procedimento que não tem um nome.
COLUMN_NAME (ODBC 2.0) 4 Varchar não NULL Nome da coluna do procedimento. O driver retorna uma cadeia de caracteres vazia para uma coluna de procedimento que não tem um nome.
COLUMN_TYPE (ODBC 2.0) 5 Smallint não NULL Define a coluna de procedimento como um parâmetro ou uma coluna de conjunto de resultados:

SQL_PARAM_TYPE_UNKNOWN: A coluna de procedimento é um parâmetro cujo tipo é desconhecido. (ODBC 1.0)

SQL_PARAM_INPUT: A coluna de procedimento é um parâmetro de entrada. (ODBC 1.0)

SQL_PARAM_INPUT_OUTPUT: A coluna de procedimento é um parâmetro de entrada/saída. (ODBC 1.0)

SQL_PARAM_OUTPUT: A coluna de procedimento é um parâmetro de saída. (ODBC 2.0)

SQL_RETURN_VALUE: A coluna de procedimento é o valor de retorno do procedimento. (ODBC 2.0)

SQL_RESULT_COL: A coluna de procedimento é uma coluna de conjunto de resultados. (ODBC 1.0)
DATA_TYPE (ODBC 2.0) 6 Smallint não NULL Tipo de dados SQL. Isso pode ser um tipo de dados SQL ODBC ou um tipo de dados SQL específico do driver. Para os tipos de dados datetime e interval, esta coluna retorna os tipos de dados concisos (por exemplo, SQL_TYPE_TIME ou SQL_INTERVAL_YEAR_TO_MONTH). Para obter uma lista de tipos de dados ODBC SQL válidos, consulte Tipos de dados SQL no Apêndice D: Tipos de dados. Para obter informações sobre tipos de dados SQL específicos do driver, consulte a documentação do driver.
TYPE_NAME (ODBC 2.0) 7 Varchar não NULL Nome do tipo de dados dependente da fonte de dados; por exemplo, "CHAR", "VARCHAR", "MONEY", "LONG VARBINARY" ou "CHAR ( ) FOR BIT DATA".
COLUMN_SIZE (ODBC 2.0) 8 Inteiro O tamanho da coluna do procedimento na fonte de dados. NULL é retornado para tipos de dados em que o tamanho da coluna não é aplicável. Para obter mais informações sobre precisão, consulte Tamanho da coluna, Dígitos decimais, Comprimento do octeto de transferência e Tamanho da tela no Apêndice D: Tipos de dados.
BUFFER_LENGTH (ODBC 2.0) 9 Inteiro O comprimento em bytes de dados transferidos em um SQLGetData ou operação SQLFetch se SQL_C_DEFAULT for especificado. Para dados numéricos, esse tamanho pode ser diferente do tamanho dos dados armazenados na fonte de dados. Para obter mais informações, consulte Tamanho da coluna, Dígitos decimais, Comprimento do octeto de transferência e Tamanho de exibição, no Apêndice D: Tipos de dados.
DECIMAL_DIGITS (ODBC 2.0) 10 Smallint Os dígitos decimais da coluna do procedimento na fonte de dados. NULL é retornado para tipos de dados em que dígitos decimais não são aplicáveis. Para obter mais informações sobre dígitos decimais, consulte Tamanho da coluna, Dígitos decimais, Comprimento do octeto de transferência e Tamanho de exibição, no Apêndice D: Tipos de dados.
NUM_PREC_RADIX (ODBC 2.0) 11 Smallint Para tipos de dados numéricos, 10 ou 2.

Se 10, os valores em COLUMN_SIZE e DECIMAL_DIGITS dão o número de dígitos decimais permitidos para a coluna. Por exemplo, uma coluna DECIMAL(12,5) retornaria um NUM_PREC_RADIX de 10, um COLUMN_SIZE de 12 e um DECIMAL_DIGITS de 5; uma coluna FLOAT pode retornar um NUM_PREC_RADIX de 10, um COLUMN_SIZE de 15 e um DECIMAL_DIGITS de NULL.

Se 2, os valores em COLUMN_SIZE e DECIMAL_DIGITS dão o número de bits permitido na coluna. Por exemplo, uma coluna FLOAT pode retornar uma NUM_PREC_RADIX de 2, uma COLUMN_SIZE de 53 e uma DECIMAL_DIGITS de NULL.

NULL é retornado para tipos de dados onde NUM_PREC_RADIX não é aplicável.
NULÁVEL (ODBC 2.0) 12 Smallint não NULL Se a coluna de procedimento aceita um valor NULL:

SQL_NO_NULLS: A coluna de procedimento não aceita valores NULL.

SQL_NULLABLE: A coluna de procedimento aceita valores NULL.

SQL_NULLABLE_UNKNOWN: Não se sabe se a coluna de procedimento aceita valores NULL.
OBSERVAÇÕES (ODBC 2.0) 13 Varchar Uma descrição da coluna procedimento.
COLUMN_DEF (ODBC 3.0) 14 Varchar O valor padrão da coluna.

Se NULL foi especificado como o valor padrão, esta coluna é a palavra NULL, não entre aspas. Se o valor padrão não puder ser representado sem truncamento, esta coluna conterá TRUNCADO, sem colocar aspas simples. Se nenhum valor padrão foi especificado, esta coluna é NULL.

O valor de COLUMN_DEF pode ser usado para gerar uma nova definição de coluna, exceto quando contém o valor TRUNCADO.
SQL_DATA_TYPE (ODBC 3.0) 15 Smallint não NULL O valor do tipo de dados SQL tal como aparece no campo SQL_DESC_TYPE do descritor. Esta coluna é igual à coluna DATA_TYPE, exceto para os tipos de dados datetime e interval.

Para os tipos de dados datetime e interval, o campo SQL_DATA_TYPE no conjunto de resultados retornará SQL_INTERVAL ou SQL_DATETIME e o campo SQL_DATETIME_SUB retornará o subcódigo para o tipo de dados de intervalo ou data/hora específico. (Consulte Apêndice D: Tipos de dados.)
SQL_DATETIME_SUB (ODBC 3.0) 16 Smallint O código de subtipo para os tipos de dados datetime e interval. Para outros tipos de dados, esta coluna retorna um NULL.
CHAR_OCTET_LENGTH (ODBC 3.0) 17 Inteiro O comprimento máximo em bytes de um caractere ou coluna de tipo de dados binário. Para todos os outros tipos de dados, esta coluna retorna um NULL.
ORDINAL_POSITION (ODBC 3.0) 18 Inteiro não NULL Para parâmetros de entrada e saída, a posição ordinal do parâmetro na definição do procedimento (em ordem crescente de parâmetros, começando em 1). Para um valor de retorno (se houver), 0 é retornado. Para colunas de conjunto de resultados, a posição ordinal da coluna no conjunto de resultados, com a primeira coluna no conjunto de resultados sendo o número 1. Se houver vários conjuntos de resultados, as posições ordinais da coluna serão retornadas de uma maneira específica do driver.
IS_NULLABLE (ODBC 3.0) 19 Varchar "NÃO" se a coluna não incluir NULLs.

"SIM" se a coluna puder incluir NULLs.

Esta coluna retorna uma cadeia de caracteres de comprimento zero se a anulabilidade for desconhecida.

As regras ISO são seguidas para determinar a anulabilidade. Um DBMS compatível com ISO SQL não pode retornar uma cadeia de caracteres vazia.

O valor retornado para esta coluna é diferente do valor retornado para a coluna NULLABLE. (Veja a descrição da coluna NULLABLE.)

Exemplo de código

Consulte Procedimento Chamadas.

Para obter informações sobre Ver
Vinculando um buffer a uma coluna em um conjunto de resultados da função SQLBindCol
Cancelamento do processamento de instruções da função SQLCancel
Buscar uma única linha ou um bloco de dados em uma direção somente para frente Função SQLFetch
Buscar um bloco de dados ou rolar por um conjunto de resultados Função SQLFetchScroll
Retornando uma lista de procedimentos em uma fonte de dados Função SQLProcedures

Ver também

de referência da API ODBC
Arquivos de cabeçalho ODBC