Dela via


SQLProcedureColumns-funktion

Efterlevnad
Version introducerad: ODBC 1.0 Standardefterlevnad: ODBC

Sammanfattning
SQLProcedureColumns returnerar listan med indata- och utdataparametrar samt de kolumner som utgör resultatuppsättningen för de angivna procedurerna. Drivrutinen returnerar informationen som en resultatuppsättning för den angivna instruktionen.

Syntax

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

Argument

StatementHandle
[Indata] Instruktionshandtag.

CatalogName
[Indata] Namn på procedurkatalog. Om en drivrutin stöder kataloger för vissa procedurer, men inte för andra, till exempel när drivrutinen hämtar data från olika DBMS anger en tom sträng ("") de procedurer som inte har kataloger. CatalogName kan inte innehålla ett strängsökningsmönster.

Om SQL_ATTR_METADATA_ID-instruktionsattributet är inställt på SQL_TRUE behandlas CatalogName som en identifierare och dess skiftläge är inte betydande. Om det är SQL_FALSE är CatalogName ett vanligt argument. det behandlas bokstavligen, och dess fall är betydande. Mer information finns i argument i Katalogfunktioner.

NameLength1
[Indata] Längd i tecken i *CatalogName.

SchemaName
[Indata] Strängsökningsmönster för schemanamn för procedur. Om en drivrutin stöder scheman för vissa procedurer, men inte för andra, till exempel när drivrutinen hämtar data från olika DBMS anger en tom sträng ("") de procedurer som inte har scheman.

Om SQL_ATTR_METADATA_ID-instruktionsattributet är inställt på SQL_TRUE behandlas SchemaName- som en identifierare och dess fall är inte betydande. Om det är SQL_FALSE är SchemaName ett mönstervärdeargument. det behandlas bokstavligen, och dess fall är betydande.

NameLength2
[Indata] Längd i tecken i *SchemaName.

ProcName
[Indata] Strängsökningsmönster för procedurnamn.

Om SQL_ATTR_METADATA_ID-instruktionsattributet är inställt på SQL_TRUE behandlas ProcName- som en identifierare och dess fall är inte betydande. Om det är SQL_FALSE är ProcName ett mönstervärdeargument. det behandlas bokstavligen, och dess fall är betydande.

NameLength3
[Indata] Längd i tecken i *ProcName.

ColumnName
[Indata] Strängsökningsmönster för kolumnnamn.

Om SQL_ATTR_METADATA_ID-instruktionsattributet är inställt på SQL_TRUE behandlas ColumnName- som en identifierare och dess skiftläge är inte betydande. Om det är SQL_FALSE är ColumnName ett mönstervärdeargument. det behandlas bokstavligen, och dess fall är betydande.

NameLength4
[Indata] Längd i tecken i *ColumnName.

Returnerar

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR eller SQL_INVALID_HANDLE.

Diagnostik

När SQLProcedureColumns returnerar SQL_ERROR eller SQL_SUCCESS_WITH_INFO kan du hämta ett associerat SQLSTATE-värde genom att anropa SQLGetDiagRec med en HandleType- av SQL_HANDLE_STMT och en Hantera för StatementHandle. I följande tabell visas de SQLSTATE-värden som ofta returneras av SQLProcedureColumns och förklarar var och en i kontexten för den här funktionen. notationen "(DM)" föregår beskrivningarna av SQLSTATEs som returneras av Driver Manager. Returkoden som är associerad med varje SQLSTATE-värde är SQL_ERROR, om inget annat anges.

SQLSTATE Fel Beskrivning
01000 Allmän varning Informationsmeddelande för drivrutinsspecifikt. (Funktionen returnerar SQL_SUCCESS_WITH_INFO.)
08S01 Kommunikationslänkfel Kommunikationslänken mellan drivrutinen och datakällan som drivrutinen var ansluten till misslyckades innan funktionen slutförde bearbetningen.
24000 Ogiltigt markörtillstånd En markör var öppen på StatementHandleoch SQLFetch eller SQLFetchScroll hade anropats. Det här felet returneras av Driver Manager om SQLFetch eller SQLFetchScroll inte har returnerat SQL_NO_DATA och returneras av drivrutinen om SQLFetch eller SQLFetchScroll har returnerat SQL_NO_DATA.

En markör var öppen på StatementHandle-, men SQLFetch eller SQLFetchScroll inte hade anropats.
40001 Serialiseringsfel Transaktionen återställdes på grund av ett resursstopp med en annan transaktion.
40003 Slutförande av instruktion okänd Den associerade anslutningen misslyckades under körningen av den här funktionen och transaktionens tillstånd kan inte fastställas.
HY000 Allmänt fel Ett fel uppstod för vilket det inte fanns någon specifik SQLSTATE och för vilken ingen implementeringsspecifik SQLSTATE definierades. Felmeddelandet som returnerades av SQLError i bufferten *MessageText beskriver felet och orsaken.
HY001 Fel vid minnesallokering Drivrutinen kunde inte allokera minne som krävs för körning eller slutförande av funktionen.
HY008 Åtgärden avbröts Asynkron bearbetning aktiverades för StatementHandle-. Funktionen anropades och innan körningen slutfördes anropades SQLCancel eller SQLCancelHandleStatementHandle-. Sedan anropades funktionen igen på StatementHandle-.

Funktionen anropades och innan körningen slutfördes anropades SQLCancel eller SQLCancelHandleStatementHandle- från en annan tråd i ett flertrådsprogram.
HY009 Ogiltig användning av null-pekare SQL_ATTR_METADATA_ID-instruktionsattributet angavs till SQL_TRUE, argumentet CatalogName var en null-pekare och SQL_CATALOG_NAME InfoType- returnerar att katalognamn stöds.

(DM) Attributet SQL_ATTR_METADATA_ID-instruktionen angavs till SQL_TRUE och argumentet SchemaName, ProcNameeller ColumnName var en null-pekare.
HY010 Funktionssekvensfel (DM) En asynkront körande funktion anropades för anslutningshandtaget som är associerat med StatementHandle-. Den här asynkrona funktionen kördes fortfarande när funktionen SQLProcedureColumns anropades.

(DM) SQLExecute, SQLExecDirecteller SQLMoreResults anropades för StatementHandle och returnerades SQL_PARAM_DATA_AVAILABLE. Den här funktionen anropades innan data hämtades för alla strömmade parametrar.

(DM) En asynkront körande funktion (inte den här) anropades för StatementHandle- och kördes fortfarande när den här funktionen anropades.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperationseller SQLSetPos anropades för StatementHandle och returnerades SQL_NEED_DATA. Den här funktionen anropades innan data skickades för alla data-at-execution-parametrar eller kolumner.
HY090 Ogiltig sträng- eller buffertlängd (DM) Värdet för ett av argumenten för namnlängd var mindre än 0 men inte lika med SQL_NTS.

Värdet för ett av argumenten för namnlängd överskred det maximala längdvärdet för motsvarande katalog, schema, procedur eller kolumnnamn.
HY117 Anslutningen pausas på grund av okänt transaktionstillstånd. Endast frånkopplings- och skrivskyddade funktioner tillåts. (DM) Mer information om inaktiverat tillstånd finns i SQLEndTran Function.
HYC00 Valfri funktion har inte implementerats En procedurkatalog har angetts och drivrutinen eller datakällan stöder inte kataloger.

Ett procedurschema har angetts och drivrutinen eller datakällan stöder inte scheman.

Ett strängsökningsmönster har angetts för procedurschemat, procedurnamnet eller kolumnnamnet, och datakällan stöder inte sökmönster för ett eller flera av dessa argument.

Kombinationen av de aktuella inställningarna för SQL_ATTR_CONCURRENCY- och SQL_ATTR_CURSOR_TYPE-instruktionsattributen stöds inte av drivrutinen eller datakällan.

SQL_ATTR_USE_BOOKMARKS-instruktionsattributet har angetts till SQL_UB_VARIABLE och SQL_ATTR_CURSOR_TYPE-instruktionsattributet har angetts till en markörtyp som drivrutinen inte stöder bokmärken för.
HYT00 Tidsgränsen har upphört att gälla Tidsgränsen löpte ut innan datakällan returnerade resultatuppsättningen. Tidsgränsen anges via SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT.
HYT01 Tidsgränsen för anslutningen har upphört att gälla Tidsgränsen för anslutningen löpte ut innan datakällan svarade på begäran. Tidsgränsen för anslutningen anges via SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Drivrutinen stöder inte den här funktionen (DM) Drivrutinen som är associerad med StatementHandle- stöder inte funktionen.
IM017 Avsökning är inaktiverat i asynkront meddelandeläge När meddelandemodellen används inaktiveras avsökningen.
IM018 SQLCompleteAsync- har inte anropats för att slutföra den tidigare asynkrona åtgärden på handtaget. Om det tidigare funktionsanropet på handtaget returnerar SQL_STILL_EXECUTING och om meddelandeläget är aktiverat måste SQLCompleteAsync anropas på handtaget för att utföra efterbearbetningen och slutföra åtgärden.

Kommentarer

Den här funktionen används vanligtvis före instruktionskörning för att hämta information om procedureparametrar och de kolumner som utgör resultatuppsättningen eller uppsättningarna som returneras av proceduren, om sådana finns. Mer information finns i Procedurer.

Not

SQLProcedureColumns kanske inte returnerar alla kolumner som används av en procedur. En drivrutin kan till exempel bara returnera information om de parametrar som används av en procedur och inte kolumnerna i en resultatuppsättning som genereras.

Argumenten SchemaName, ProcNameoch ColumnName accepterar sökmönster. Mer information om giltiga sökmönster finns i Mönstervärdeargument.

Not

Mer information om allmän användning, argument och returnerade data för ODBC-katalogfunktioner finns i Catalog Functions.

SQLProcedureColumns returnerar resultatet som en standardresultatuppsättning, sorterad efter PROCEDURE_CAT, PROCEDURE_SCHEM, PROCEDURE_NAME och COLUMN_TYPE. Kolumnnamn returneras för varje procedur i följande ordning: namnet på returvärdet, namnen på varje parameter i procedurens anrop (i anropsordning) och sedan namnen på varje kolumn i resultatuppsättningen som returneras av proceduren (i kolumnordning).

Program ska binda drivrutinsspecifika kolumner i förhållande till slutet av resultatuppsättningen. Mer information finns i data som returneras av Catalog Functions.

För att fastställa de faktiska längden på kolumnerna PROCEDURE_CAT, PROCEDURE_SCHEM, PROCEDURE_NAME och COLUMN_NAME kan ett program anropa SQLGetInfo- med alternativen SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_PROCEDURE_NAME_LEN och SQL_MAX_COLUMN_NAME_LEN.

Följande kolumner har bytt namn för ODBC 3.x. Kolumnnamnändringarna påverkar inte bakåtkompatibiliteten eftersom program binder efter kolumnnummer.

ODBC 2.0-kolumn ODBC 3.x kolumn
PROCEDURE_QUALIFIER PROCEDURE_CAT
PROCEDURE _OWNER PROCEDURE_SCHEM
PRECISION COLUMN_SIZE
LÄNGD BUFFER_LENGTH
SKALA DECIMAL_DIGITS
RADIX NUM_PREC_RADIX

Följande kolumner har lagts till i resultatuppsättningen som returneras av SQLProcedureColumns för ODBC 3.x:

  • COLUMN_DEF

  • DATETIME_CODE

  • CHAR_OCTET_LENGTH

  • ORDINAL_POSITION

  • IS_NULLABLE

I följande tabell visas kolumnerna i resultatuppsättningen. Ytterligare kolumner utöver kolumn 19 (IS_NULLABLE) kan definieras av drivrutinen. Ett program bör få åtkomst till drivrutinsspecifika kolumner genom att räkna ned från slutet av resultatuppsättningen i stället för att ange en explicit ordningstalsposition. Mer information finns i data som returneras av Catalog Functions.

Kolumnnamn Kolumnnummer Datatyp Kommentarer
PROCEDURE_CAT (ODBC 2.0) 1 Varchar Namn på procedurkatalog; NULL om det inte gäller för datakällan. Om en drivrutin stöder kataloger för vissa procedurer men inte för andra, till exempel när drivrutinen hämtar data från olika DBMS returnerar den en tom sträng ("") för de procedurer som inte har kataloger.
PROCEDURE_SCHEM (ODBC 2.0) 2 Varchar Schemanamn för procedur; NULL om det inte gäller för datakällan. Om en drivrutin stöder scheman för vissa procedurer men inte för andra, till exempel när drivrutinen hämtar data från olika DBMS returnerar den en tom sträng ("") för de procedurer som inte har scheman.
PROCEDURE_NAME (ODBC 2.0) 3 Varchar inte NULL Procedurnamn. En tom sträng returneras för en procedur som inte har något namn.
COLUMN_NAME (ODBC 2.0) 4 Varchar inte NULL Kolumnnamn för procedur. Drivrutinen returnerar en tom sträng för en procedurkolumn som inte har något namn.
COLUMN_TYPE (ODBC 2.0) 5 Smallint inte NULL Definierar procedurkolumnen som en parameter eller en resultatuppsättningskolumn:

SQL_PARAM_TYPE_UNKNOWN: Kolumnen procedure är en parameter vars typ är okänd. (ODBC 1.0)

SQL_PARAM_INPUT: Kolumnen procedure är en indataparameter. (ODBC 1.0)

SQL_PARAM_INPUT_OUTPUT: Kolumnen procedure är en indata-/utdataparameter. (ODBC 1.0)

SQL_PARAM_OUTPUT: Kolumnen procedure är en utdataparameter. (ODBC 2.0)

SQL_RETURN_VALUE: Procedurkolumnen är returvärdet för proceduren. (ODBC 2.0)

SQL_RESULT_COL: Procedurkolumnen är en resultatuppsättningskolumn. (ODBC 1.0)
DATA_TYPE (ODBC 2.0) 6 Smallint inte NULL SQL-datatyp. Detta kan vara en ODBC SQL-datatyp eller en drivrutinsspecifik SQL-datatyp. För datatyperna datetime och interval returnerar den här kolumnen de koncisa datatyperna (till exempel SQL_TYPE_TIME eller SQL_INTERVAL_YEAR_TO_MONTH). En lista över giltiga ODBC SQL-datatyper finns i SQL-datatyper i bilaga D: Datatyper. Information om drivrutinsspecifika SQL-datatyper finns i drivrutinsdokumentationen.
TYPE_NAME (ODBC 2.0) 7 Varchar inte NULL Namn på datakällaberoende datatyp; till exempel "CHAR", "VARCHAR", "MONEY", "LONG VARBINARY" eller "CHAR ( ) FOR BIT DATA".
COLUMN_SIZE (ODBC 2.0) 8 Heltal Kolumnstorleken för procedurkolumnen i datakällan. NULL returneras för datatyper där kolumnstorleken inte är tillämplig. Mer information om precision finns i Kolumnstorlek, Decimaltal, Överföra oktettlängd och Visningsstorlek i bilaga D: Datatyper.
BUFFER_LENGTH (ODBC 2.0) 9 Heltal Längden i byte av data som överförs på en SQLGetData- eller SQLFetch åtgärd om SQL_C_DEFAULT anges. För numeriska data kan den här storleken skilja sig från storleken på data som lagras på datakällan. Mer information finns i Kolumnstorlek, Decimalsiffror, Överför oktettlängd och Visningsstorleki bilaga D: Datatyper.
DECIMAL_DIGITS (ODBC 2.0) 10 Smallint Decimaltalen i procedurkolumnen i datakällan. NULL returneras för datatyper där decimaltal inte är tillämpliga. Mer information om decimaltal finns i Kolumnstorlek, Decimaltal, Överför oktettlängd och Visningsstorleki bilaga D: Datatyper.
NUM_PREC_RADIX (ODBC 2.0) 11 Smallint För numeriska datatyper, antingen 10 eller 2.

Om 10 ger värdena i COLUMN_SIZE och DECIMAL_DIGITS antalet decimalsiffror som tillåts för kolumnen. Till exempel returnerar en DECIMAL(12,5) kolumn en NUM_PREC_RADIX på 10, en COLUMN_SIZE på 12 och en DECIMAL_DIGITS av 5; en FLOAT-kolumn kan returnera en NUM_PREC_RADIX på 10, en COLUMN_SIZE på 15 och en DECIMAL_DIGITS null.

Om 2 ger värdena i COLUMN_SIZE och DECIMAL_DIGITS antalet bitar som tillåts i kolumnen. En FLOAT-kolumn kan till exempel returnera en NUM_PREC_RADIX på 2, en COLUMN_SIZE på 53 och en DECIMAL_DIGITS null.

NULL returneras för datatyper där NUM_PREC_RADIX inte är tillämpligt.
NULLABLE (ODBC 2.0) 12 Smallint inte NULL Om procedurkolumnen accepterar ett NULL-värde:

SQL_NO_NULLS: Procedurkolumnen accepterar inte NULL-värden.

SQL_NULLABLE: Procedurkolumnen accepterar NULL-värden.

SQL_NULLABLE_UNKNOWN: Det är inte känt om procedurkolumnen accepterar NULL-värden.
ANMÄRKNINGAR (ODBC 2.0) 13 Varchar En beskrivning av procedurkolumnen.
COLUMN_DEF (ODBC 3.0) 14 Varchar Standardvärdet för kolumnen.

Om NULL angavs som standardvärde är den här kolumnen ordet NULL, inte omgivet av citattecken. Om standardvärdet inte kan representeras utan trunkering, innehåller den här kolumnen TRUNKERADE, utan omslutande enkla citattecken. Om inget standardvärde har angetts är den här kolumnen NULL.

Värdet för COLUMN_DEF kan användas för att generera en ny kolumndefinition, förutom när det innehåller värdet TRUNKERAD.
SQL_DATA_TYPE (ODBC 3.0) 15 Smallint inte NULL Värdet för SQL-datatypen som det visas i fältet SQL_DESC_TYPE i beskrivningen. Den här kolumnen är samma som kolumnen DATA_TYPE, förutom datatyperna datetime och interval.

För datatyperna datetime och interval returnerar fältet SQL_DATA_TYPE i resultatuppsättningen SQL_INTERVAL eller SQL_DATETIME, och fältet SQL_DATETIME_SUB returnerar underkoden för den specifika datatypen intervall eller datetime. (Se bilaga D: Datatyper.)
SQL_DATETIME_SUB (ODBC 3.0) 16 Smallint Undertypkoden för datatyperna datetime och interval. För andra datatyper returnerar den här kolumnen en NULL.
CHAR_OCTET_LENGTH (ODBC 3.0) 17 Heltal Den maximala längden i byte av en kolumn för ett tecken eller en binär datatyp. För alla andra datatyper returnerar den här kolumnen en NULL.
ORDINAL_POSITION (ODBC 3.0) 18 Heltal inte NULL För indata- och utdataparametrar är parameterns ordningstalsposition i procedurdefinitionen (i ökande parameterordning från och med 1). För ett returvärde (om det finns något) returneras 0. För resultatuppsättningskolumner är kolumnens ordningsföljdsposition i resultatuppsättningen, där den första kolumnen i resultatuppsättningen är nummer 1. Om det finns flera resultatuppsättningar returneras kolumnordningspositioner på ett förarspecifikt sätt.
IS_NULLABLE (ODBC 3.0) 19 Varchar "NEJ" om kolumnen inte innehåller NULLs.

"JA" om kolumnen kan innehålla NULLL:er.

Den här kolumnen returnerar en sträng med noll längd om nullbarheten är okänd.

ISO-regler följs för att fastställa nullbarhet. En ISO SQL-kompatibel DBMS kan inte returnera en tom sträng.

Värdet som returneras för den här kolumnen skiljer sig från det värde som returneras för kolumnen NULLABLE. (Se beskrivningen av kolumnen NULLABLE.)

Kodexempel

Se proceduranrop.

Mer information om Se
Binda en buffert till en kolumn i en resultatuppsättning SQLBindCol Function
Avbryta instruktionsbearbetning SQLCancel-funktion
Hämtar en enskild rad eller ett datablock i framåtriktad riktning SQLFetch-funktion
Hämtar ett datablock eller bläddrar igenom en resultatuppsättning SQLFetchScroll Function
Returnera en lista över procedurer i en datakälla SQLProcedures Function

Se även

ODBC API-referens
ODBC-huvudfiler