Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uygunluk
Tanıtılan Sürüm: ODBC 1.0 Standartlar Uyumu: Open Group
Summary
SQLSpecialColumns, belirli bir tablodaki sütunlar hakkında aşağıdaki bilgileri alır:
Tablodaki bir satırı benzersiz şekilde tanımlayan optimal sütun kümesi.
Satırdaki herhangi bir değer işlem tarafından güncellendiğinde otomatik olarak güncellenen sütunlar.
Syntax
SQLRETURN SQLSpecialColumns(
SQLHSTMT StatementHandle,
SQLSMALLINT IdentifierType,
SQLCHAR * CatalogName,
SQLSMALLINT NameLength1,
SQLCHAR * SchemaName,
SQLSMALLINT NameLength2,
SQLCHAR * TableName,
SQLSMALLINT NameLength3,
SQLSMALLINT Scope,
SQLSMALLINT Nullable);
Arguments
StatementHandle
[Giriş] Deyim tanıtıcısı.
Tanımlayıcı Türü
[Giriş] Geri dönecek sütun türü. Aşağıdaki değerlerden biri olmalıdır:
SQL_BEST_ROWID: Sütun veya sütunlardan değerler alınarak belirlenen tablodaki herhangi bir satırın benzersiz şekilde tanımlanmasını sağlayan optimal sütun veya sütun kümesini döndürür. Bir sütun, bu amaçla özel olarak tasarlanmış bir sözde sütun (Oracle ROWID veya Ingres TID'de olduğu gibi) veya tablo için herhangi bir benzersiz indeksin sütunu veya sütunları olabilir.
SQL_ROWVER: Belirtilen tablodaki sütun veya sütunları döndürür; varsa, veri kaynağı tarafından otomatik olarak güncellenen satırdaki herhangi bir değer (SQLBase ROWID veya Sybase TIMESTAMP gibi) güncellenir.
Catalogname
[Giriş] Tablonun katalog adı. Bir sürücü bazı tablolar için katalogları desteklerken diğerleri için desteklemiyorsa, örneğin sürücü farklı DBMS'lerden veri alırken, boş bir dizi ("") katalogları olmayan tabloları gösterir.
CatalogName bir dizi arama deseni içeremez.
Eğer SQL_ATTR_METADATA_ID ifadesi özniteliği SQL_TRUE olarak ayarlanmışsa, CatalogName tanımlayıcı olarak ele alınır ve durumu anlamlı değildir. Eğer SQL_FALSE ise, CatalogName sıradan bir argümandır; kelime kelimesi kelimesine ele alınır ve durumu önemlidir. Daha fazla bilgi için bkz. Katalog İşlevleri'ndeki Bağımsız Değişkenler.
NameLength1
[Giriş] *CatalogName'nin karakterlerindeki uzunluk.
Şema Adı
[Giriş] Tablo için şema adı. Bir sürücü bazı tablolar için şemaları desteklerken diğerleri için desteklemiyorsa, örneğin sürücü farklı DBMS'lerden veri alırken, boş bir dizi ("") şema olmayan tabloları gösterir.
SchemaName bir dizi arama deseni içeremez.
SQL_ATTR_METADATA_ID ifadesi özniteliği SQL_TRUE olarak ayarlanmışsa, SchemaName tanımlayıcı olarak kabul edilir ve durumu anlamlı değildir. Eğer SQL_FALSE ise, SchemaName sıradan bir argümandır; kelime kelimesi kelimesine ele alınır ve durumu önemlidir.
NameLength2
[Giriş] *SchemaName'nin karakterlerindeki uzunluk.
Tablo Adı
[Giriş] Tablo adı. Bu argüman bir null işaretçi olamaz.
TableName bir dizi arama deseni içeremez.
Eğer SQL_ATTR_METADATA_ID ifadesi özniteliği SQL_TRUE olarak ayarlanmışsa, TableName tanımlayıcı olarak ele alınır ve durumu anlamlı değildir. Eğer SQL_FALSE ise, TableName sıradan bir argümandır; kelime kelimesi kelimesine ele alınır ve durumu önemlidir.
NameLength3
[Giriş] *TableName'in karakterlerindeki uzunluk.
Scope
[Giriş] Rowid'in minimum gerekli kapsamı. Geri dönen rowid daha geniş kapsama sahip olabilir. Aşağıdakilerden biri olmalıdır:
SQL_SCOPE_CURROW: Rowid, yalnızca o sırada konumlandığında geçerli olduğu garanti edilir. Sonraki bir kez rowid kullanılarak yapılan bir yeniden seçim, satır başka bir işlemle güncellenmiş veya silinmişse satır döndürmeyebilir.
SQL_SCOPE_TRANSACTION: Rowid'in mevcut işlem süresi boyunca geçerli olması garanti edilir.
SQL_SCOPE_SESSION: Rowid'in oturum süresi boyunca (işlem sınırları aşarak) geçerli olması garanti edilir.
Nullable
[Giriş] NULL değeri olabilecek özel sütunların döndürüp döndürülmemesini belirler. Aşağıdakilerden biri olmalıdır:
SQL_NO_NULLS: NULL değerlerine sahip özel sütunları hariç tutun. Bazı sürücüler SQL_NO_NULLS destekleyemez ve bu sürücüler SQL_NO_NULLS belirtildiyse boş bir sonuç kümesi döndürür. Başvurular bu dava için hazırlanmalı ve SQL_NO_NULLS ancak kesinlikle gerekliyse talep edilmelidir.
SQL_NULLABLE: Özel sütunlar, NULL değerleri olsa bile döndür.
İadeler
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR ya da SQL_INVALID_HANDLE.
Diagnostics
SQLSpecialColumns SQL_ERROR veya SQL_SUCCESS_WITH_INFO döndürdüğünde, ilişkili bir SQLSTATE değeri, SQL_HANDLE_STMT HandleType ve HandleType of StatementHandle ile SQLGetDiagRec çağrılarak elde edilebilir. Aşağıdaki tablo, SQLSpecialColumns tarafından sıkça döndürülen SQLSTATE değerlerini listeler ve her birini bu fonksiyonun bağlamında açıklar; "(DM)" gösterimi, Sürücü Yöneticisi tarafından döndürülen SQLSTATE açıklamalarından önce gelir. Aksi belirtilmediği sürece, her SQLSTATE değeriyle ilişkili dönüş kodu SQL_ERROR.
| SQLSTATE | Error | Description |
|---|---|---|
| 01000 | Genel uyarı | Sürücüye özgü bilgilendirici ileti. (İşlev SQL_SUCCESS_WITH_INFO döndürür.) |
| 08S01 | İletişim bağlantısı hatası | sürücü ile sürücünün bağlandığı veri kaynağı arasındaki iletişim bağlantısı, işlev işlenmeden önce başarısız oldu. |
| 24000 | Geçersiz imleç durumu |
StatementHandle'da bir imleç açıktı ve SQLFetch veya SQLFetchScroll çağrılmıştı. Bu hata, SQLFetch veya SQLFetchScroll SQL_NO_DATA döndürmediyse Sürücü Yöneticisi tarafından döner, eğer SQLFetch veya SQLFetchScroll SQL_NO_DATA döndürdüyse sürücü tarafından döndürülür. StatementHandle'da bir imleç açıktı, ancak SQLFetch veya SQLFetchScroll çağrılmamıştı. |
| 40001 | Serileştirme hatası | Başka bir işlemle kaynak kilitlenmesi nedeniyle işlem geri alındı. |
| 40003 | Deyim tamamlama bilinmiyor | İlişkili bağlantı bu işlevin yürütülmesi sırasında başarısız oldu ve işlemin durumu belirlenemiyor. |
| HY000 | Genel hata | Belirli bir SQLSTATE olmayan ve uygulamaya özgü SQLSTATE tanımlanmayan bir hata oluştu. *MessageText arabelleğinde SQLGetDiagRec tarafından döndürülen hata iletisi, hatayı ve nedenini açıklar. |
| HY001 | Bellek ayırma hatası | Sürücü, işlevin yürütülmesini veya tamamlanmasını desteklemek için gereken belleği ayıramadı. |
| HY008 | İşlem iptal edildi |
StatementHandle için zaman uyumsuz işleme etkinleştirildi. İşlev çağrıldı ve yürütme tamamlanmadan önce StatementHandle üzerinde SQLCancel veya SQLCancelHandle çağrıldı. Ardından işlev StatementHandle üzerinde yeniden çağrıldı. İşlev çağrıldı ve yürütme tamamlanmadan önce, çok iş parçacıklı bir uygulamadaki farklı bir iş parçacığından StatementHandle üzerinde SQLCancel veya SQLCancelHandle çağrıldı. |
| HY009 | Geçersiz null işaretçi kullanımı |
TableName bağımsız değişkeni null işaretçiydi. SQL_ATTR_METADATA_ID ifadesi özniteliği SQL_TRUE olarak ayarlanmıştı, CatalogName argümanı null işaretçiydi ve SQL_CATALOG_NAME InfoType katalog adlarının desteklendiğini döndürdü. (DM) SQL_ATTR_METADATA_ID ifade niteliği SQL_TRUE olarak ayarlanmıştı ve SchemaName argümanı bir null pointer'dı. |
| HY010 | İşlev dizisi hatası | (DM) StatementHandle ile ilişkili bağlantı tanıtıcısı için zaman uyumsuz olarak yürütülen bir işlev çağrıldı. Bu fonksiyon SQLSpecialColumns çağrıldığında hâlâ çalışıyordu. (DM) SQLExecute, SQLExecDirect veya SQLMoreResults, StatementHandle için çağrıldı ve SQL_PARAM_DATA_AVAILABLE döndürdü. Bu işlev, tüm akış parametreleri için veri alınmadan önce çağrıldı. (DM) StatementHandle için zaman uyumsuz olarak yürütülen bir işlev (bu işlev değil) çağrıldı ve bu işlev çağrıldığında hala yürütülüyordu. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations veya SQLSetPos, StatementHandle için çağrıldı ve SQL_NEED_DATA döndürdü. Bu işlev, tüm yürütme sırasında veri parametreleri veya sütunları için veri gönderilmeden önce çağrıldı. |
| HY013 | Bellek yönetimi hatası | Büyük olasılıkla düşük bellek koşulları nedeniyle, temel alınan bellek nesnelerine erişilemediğinden işlev çağrısı işlenemedi. |
| HY090 | Geçersiz dize veya arabellek uzunluğu | (DM) Uzunluk argümanlarından birinin değeri 0'dan küçüktü ancak SQL_NTS'ye eşit değildi. Uzunluk argümanlarından birinin değeri, ilgili isim için maksimum uzunluk değerini aşmıştır. Her ismin maksimum uzunluğu, SQLGetInfo ile InfoType değerleri çağrılarak elde edilebilir: SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN veya SQL_MAX_TABLE_NAME_LEN. |
| HY097 | Menzil dışı sütun tipi | (DM) Geçersiz bir IdentifierType değeri belirtildi. |
| HY098 | Menzil dışı dürbün türü | (DM) Geçersiz bir Kapsam değeri belirtildi. |
| HY099 | Nullable tip menzil dışı | (DM) Geçersiz bir Nullable değeri belirtildi. |
| HY117 | Bilinmeyen işlem durumu nedeniyle bağlantı askıya alındı. Yalnızca bağlantıyı kesme ve salt okunur işlevlere izin verilir. | (DM) Askıya alınma durumu hakkında daha fazla bilgi için bkz. SQLEndTran İşlevi. |
| HYC00 | İsteğe bağlı özellik uygulanmadı | Bir katalog belirtilmiş ve sürücü veya veri kaynağı katalogları desteklememektedir. Bir şema belirtildi ve sürücü veya veri kaynağı şemaları desteklemez. SQL_ATTR_CONCURRENCY ve SQL_ATTR_CURSOR_TYPE deyimi özniteliklerinin geçerli ayarlarının birleşimi sürücü veya veri kaynağı tarafından desteklenmiyordu. SQL_ATTR_USE_BOOKMARKS deyimi özniteliği SQL_UB_VARIABLE olarak, SQL_ATTR_CURSOR_TYPE deyimi özniteliği ise sürücünün yer işaretlerini desteklemediği bir imleç türüne ayarlandı. |
| HYT00 | Zaman aşımı süresi doldu | Veri kaynağı istenen sonuç kümesini döndürmeden önce sorgu zaman aşımı süresi doldu. Zaman aşımı süresi SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT aracılığıyla ayarlanır. |
| HYT01 | Bağlantı zaman aşımı süresi doldu | Veri kaynağı isteği yanıtlamadan önce bağlantı zaman aşımı süresi doldu. Bağlantı zaman aşımı süresi SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT aracılığıyla ayarlanır. |
| IM001 | Sürücü bu işlevi desteklemiyor | (DM) StatementHandle ile ilişkili sürücü işlevi desteklemiyor. |
| IM017 | Yoklama zaman uyumsuz bildirim modunda devre dışı bırakıldı | Bildirim modeli her kullanıldığında yoklama devre dışı bırakılır. |
| IM018 | SQLCompleteAsync , bu tanıtıcıda önceki zaman uyumsuz işlemi tamamlamak için çağrılmadı. | Tanıtıcıdaki önceki işlev çağrısı SQL_STILL_EXECUTING döndürüyorsa ve bildirim modu etkinleştirildiyse, son işlemeyi yapmak ve işlemi tamamlamak için tanıtıcıda SQLCompleteAsync çağrılmalıdır. |
Comments
IdentifierType argümanı SQL_BEST_ROWID olduğunda, SQLSpecialColumns tablodaki her satırı benzersiz şekilde tanımlayan sütun veya sütunları döndürür. Bu sütunlar her zaman bir seçim listesi veya WHERE maddesinde kullanılabilir. Bir tablonun sütunlarında çeşitli bilgileri döndürmek için kullanılan SQLColumns, her satırı benzersiz şekilde tanımlayan sütunları veya satırdaki herhangi bir değer işlem tarafından güncellendiğinde otomatik güncellenen sütunları mutlaka getirmez. Örneğin, SQLColumn'lar Oracle sözde sütunlu ROWID'i döndürmeyebilir. Bu yüzden bu sütunları geri getirmek için SQLSpecialColumns kullanılır. Daha fazla bilgi için bkz. Katalog Verilerinin Kullanımları.
Note
ODBC katalog işlevlerinin genel kullanımı, bağımsız değişkenleri ve döndürülen verileri hakkında daha fazla bilgi için bkz . Katalog İşlevleri.
Tablodaki her satırı benzersiz şekilde tanımlayan sütun yoksa, SQLSpecialColumns satır olmayan bir satır kümesi döndürür; sonraki çağrıda SQLFetch veya SQLFetchScroll ile yapılan bir çağrı SQL_NO_DATA döndürür.
IdentifierType, Scope veya Nullable argümanları veri kaynağı tarafından desteklenmeyen özellikleri belirtiyorsa, SQLSpecialColumns boş bir sonuç kümesi döndürür.
Eğer SQL_ATTR_METADATA_ID ifadesi özniteliği SQL_TRUE olarak ayarlanmışsa, CatalogName, SchemaName ve TableName argümanları tanımlayıcı olarak kabul edilir, bu nedenle belirli durumlarda null işaretçiye ayarlanamazlar. (Daha fazla bilgi için bkz. Katalog Fonksiyonlarındaki Argümanlar.)
SQLSpecialColumns, sonuçları SCOPE ile sıralanmış standart bir sonuç seti olarak döndürür.
Odbc 3.x için aşağıdaki sütunlar yeniden adlandırıldı. Sütun adı değişiklikleri, uygulamalar sütun numarasına göre bağlandığı için geriye doğru uyumluluğu etkilemez.
| ODBC 2.0 sütunu | ODBC 3.x sütunu |
|---|---|
| KESİNLİK | KOLON_BOYUTU |
| Uzunluk | BUFFER UZUNLUĞU |
| ÖLÇEK | Ondalık Basamaklar |
COLUMN_NAME sütununun gerçek uzunluğunu belirlemek için bir uygulama, SQL_MAX_COLUMN_NAME_LEN seçeneğiyle SQLGetInfo çağırabilir.
Aşağıdaki tabloda sonuç kümesindeki sütunlar listelenir. 8. sütun (PSEUDO_COLUMN) ötesinde ek sütunlar sürücü tarafından tanımlanabilir. Bir uygulama, açık bir sıralı konum belirtmek yerine sonuç kümesinin sonundan geri sayarak sürücüye özgü sütunlara erişim sağlamalıdır. Daha fazla bilgi için bkz. Katalog İşlevleri Tarafından Döndürülen Veriler.
| Sütun adı | Sütun numarası | Veri türü | Comments |
|---|---|---|---|
| KAPSAM (ODBC 1.0) | 1 | Smallint | Gürültünün gerçek kapsamı. Aşağıdaki değerlerden birini içerir: SQL_SCOPE_CURROW SQL_SCOPE_TRANSACTION SQL_SCOPE_SESSION NULL, IdentifierType SQL_ROWVER olduğunda döner. Her bir değerin tanımı için, bu bölümün başındaki "Syntax" bölümünde Scope'un açıklamasına bakınız. |
| COLUMN_NAME (ODBC 1.0) | 2 | Varchar NULL değil | Sütun adı. Sürücü, adı olmayan bir sütun için boş bir diziyi döndürür. |
| DATA_TYPE (ODBC 1.0) | 3 | Smallint NULL değil | SQL veri türü. Bu bir ODBC SQL veri türü veya sürücüye özgü bir SQL veri türü olabilir. Geçerli ODBC SQL veri tiplerinin listesi için SQL Veri Türleri sayfasına bakınız. Sürücüye özgü SQL veri türleri hakkında bilgi için sürücünün belgelerine bakın. |
| TYPE_NAME (ODBC 1.0) | 4 | Varchar NULL değil | Veri kaynağına bağımlı veri türü adı; örneğin, "CHAR", "VARCHAR", "MONEY", "LONG VARBINARY" veya "CHAR ( ) FOR BIT DATA". |
| COLUMN_SIZE (ODBC 1.0) | 5 | Integer | Veri kaynağındaki sütunun boyutu. Sütun boyutu hakkında daha fazla bilgi için Sütun Boyutu, Ondalık Rakamlar, Aktarım Sekizli Uzunluk ve Ekran Boyutu bölümlerine bakınız. |
| BUFFER_LENGTH (ODBC 1.0) | 6 | Integer | SQLGetData veya SQL_C_DEFAULT belirtilirse SQLFetch işlemine aktarılan verilerin bayt cinsinden uzunluğu. Sayısal veriler için bu boyut, veri kaynağında depolanan verilerin boyutundan farklı olabilir. Bu değer, karakter verisi için COLUMN_SIZE sütunundan farklı olabilir. Daha fazla bilgi için bkz. Sütun Boyutu, Ondalık Rakamlar, Transfer Oktet Uzunluğu ve Ekran Boyutu. |
| DECIMAL_DIGITS (ODBC 1.0) | 7 | Smallint | Veri kaynağındaki sütunun ondalık rakamları. NULL, ondalık rakamların geçerli olmadığı veri türleri için döndürülür. Ondalık rakamlar hakkında daha fazla bilgi için Sütun Boyutu, Ondalık Rakamlar, Transfer Oktet Uzunluğu ve Ekran Boyutu bölümlerine bakınız. |
| PSEUDO_COLUMN (ODBC 2.0) | 8 | Smallint | Sütunun Oracle ROWID gibi bir sözde sütun olup olmadığını gösterir: SQL_PC_UNKNOWN SQL_PC_NOT_PSEUDO SQL_PC_PSEUDO Not: Maksimum birlikte çalışabilirlik için, söyledo sütunlar SQLGetInfo tarafından döndürülen tanımlayıcı tırnak karakteriyle alıntılanmamalıdır. |
Uygulama SQL_BEST_ROWID için değerleri aldıktan sonra, bu değerleri tanımlı kapsam içinde o satırı yeniden seçmek için kullanabilir. SELECT ifadesi ya satır yok ya da tek satır döndürecektir.
Bir uygulama sıralı sütun veya sütunlara göre bir satırı yeniden seçerse ve satır bulunmazsa, uygulama satırın silindiğini veya sıralı sütunların değiştirildiğini varsayabilir. Tam tersi doğru değildir: rowid değişmemiş olsa bile, sıradaki diğer sütunlar değişmiş olabilir.
Sütun tipi için dönen sütunlar SQL_BEST_ROWID en son verileri bir satır kümesinden almak için bir sonuç kümesi içinde ileri geri kaydırması gereken uygulamalar için faydalıdır. Rowid'in sütunu veya sütunları, o sırada konumlandığında değişmemesi garanti edilir.
Rowid'in sütunu veya sütunları, imleç satırda bulunmadığında bile geçerli kalabilir; uygulama bunu sonuç kümesindeki SCOPE sütununu kontrol ederek belirleyebilir.
SQL_ROWVER sütun tipi için döner, sıralı sırayla yeniden seçilirken belirli bir satırdaki herhangi bir sütunun güncellenip güncellenmediğini kontrol etme yeteneğine ihtiyaç duyan uygulamalar için faydalıdır. Örneğin, rowid kullanarak bir satır yeniden seçildikten sonra, uygulama SQL_ROWVER sütunlarındaki önceki değerleri yeni alınanlarla karşılaştırabilir. Bir SQL_ROWVER sütunundaki değer önceki değerden farklıysa, uygulama kullanıcıya ekrandaki verilerin değiştiğini bildirebilir.
Kod Örneği
Benzer bir fonksiyonun kod örneği için SQLColumns'a bakınız.
İlgili Fonksiyonlar
| Hakkında bilgi için | Bkz: |
|---|---|
| Sonuç kümesindeki bir sütuna arabellek bağlama | SQLBindCol İşlevi |
| Deyim işlemeyi iptal etme | SQLCancel İşlevi |
| Bir tablo veya tablodaki sütunları geri göndermek | SQLColumns Fonksiyonu |
| Tek bir satır veya veri bloğunu sadece ileri yönde almak | SQLFetch İşlevi |
| Veri bloğunu getirme veya sonuç kümesinde kaydırma | SQLFetchScroll İşlevi |
| Birincil anahtarın sütunlarını döndürme | SQLPrimaryKeys İşlevi |