Erlang 21

odbc




erlang

odbc

मॉड्यूल

ODBC

मॉड्यूल सारांश

Erlang ODBC आवेदन

विवरण

यह एप्लिकेशन रिलेशनल एसक्यूएल-डेटाबेस के साथ संवाद करने के लिए एरलंग इंटरफ़ेस प्रदान करता है। यह माइक्रोसॉफ़्ट ODBC इंटरफ़ेस के शीर्ष पर बनाया गया है और इसलिए आपको डेटाबेस से एक ODBC ड्राइवर की आवश्यकता है जिसे आप कनेक्ट करना चाहते हैं।

ध्यान दें

first/[1,2] , last/[1,2] , next/[1,2] , prev[1,2] और select/[3,4] कार्य एक कनेक्शन के साथ जुड़ा हुआ परिणाम है जिसपे काम करना। फ़ंक्शन को कॉल करना select_count/[2,3] ऐसे परिणाम को कनेक्शन के साथ सेट करता है। Select_count को फिर से कॉल करने से वर्तमान परिणाम सेट एसोसिएशन को हटा दिया जाएगा और एक नया बनाया जाएगा। एक फ़ंक्शन को कॉल करना जो खुराक को संबंधित परिणाम सेट पर संचालित नहीं करता है, जैसे कि sql_query/[2,3] , वर्तमान परिणाम सेट एसोसिएशन को हटा देगा।

काश कुछ ड्राइवर केवल परिणाम सेट के अनुक्रमिक ट्रैवर्सल का समर्थन करते हैं, ei वे समर्थन नहीं करते हैं जो ODBC दुनिया में स्क्रॉल करने योग्य कर्सर के रूप में जाना जाता है। इसका प्रभाव यह होगा कि first/[1,2] , last/[1,2] , prev[1,2] , आदि जैसे कार्य {error, driver_does_not_support_function} वापस {error, driver_does_not_support_function}

सामान्य डेटा प्रकार

इस प्रकार प्रकार परिभाषाएँ जो ODBC API में एक से अधिक फ़ंक्शन द्वारा उपयोग की जाती हैं।

ध्यान दें

TimeOut में डिफ़ॉल्ट मान infinity , इसलिए उदाहरण के लिए:
प्रतिबद्ध (रेफ, कमोडोड) कमिट (रेफ, कमोडोड, इन्फिनिटी) के समान है। यदि समय समाप्ति की समय सीमा समाप्त हो जाती है, तो ग्राहक समयावधि के साथ बाहर निकल जाएगा।

connection_reference() - as returned by connect/2    
time_out() = milliseconds() | infinity    
milliseconds() = integer() >= 0     
common_reason() = connection_closed | extended_error() | term() - some kind of
explanation of what went wrong    
extended_error() = {string(), integer(), Reason} - extended error type with ODBC
and native database error codes, as well as the base reason that would have been
returned had extended_errors not been enabled. 
string() = list of ASCII characters    
col_name() = string() - Name of column in the result set    
col_names() - [col_name()] - e.g. a list of the names of the
          selected columns in the result set.     
row() = {value()} - Tuple of column values e.g. one row of the
          result set.     
value() = null | term() - A column value.     
rows() = [row()] - A list of rows from the result set.    
result_tuple() =
     {updated, n_rows()} | {selected, col_names(), rows()}    
n_rows() = integer() - The number of affected rows for UPDATE,
          INSERT, or DELETE queries. For other query types the value
          is driver defined, and hence should be ignored.    
odbc_data_type() = sql_integer | sql_smallint | sql_tinyint |
     {sql_decimal, precision(), scale()} |
     {sql_numeric, precision(), scale()} |
     {sql_char, size()} |
     {sql_wchar, size()} |
     {sql_varchar, size()} |
     {sql_wvarchar, size()}|
     {sql_float, precision()} |
     {sql_wlongvarchar, size()} |
     {sql_float, precision()} |
     sql_real | sql_double | sql_bit | atom()
precision() = integer()    
scale() = integer()    
size() = integer()    

गलती संभालना

एरलांग ODBC User's Guide. त्रुटि से निपटने की रणनीति और संभावित त्रुटियों के स्रोतों का वर्णन किया गया है User's Guide.

निर्यात

प्रतिबद्ध (रेफ, कमोडोड) ->
प्रतिबद्ध (रेफरी, कमोडोड, टाइमऑट) -> ठीक | {त्रुटि, कारण}

प्रकार

लेन-देन को रोलबैक या रोलबैक करता है। उन कनेक्शनों की आवश्यकता है जहां स्वचालित प्रतिबद्धता बंद हो।

कनेक्ट (ConnectStr, विकल्प) -> {ठीक है, Ref} | {त्रुटि, कारण}

प्रकार

कनेक्शन स्ट्रिंग का एक उदाहरण: "DSN=sql-server;UID=aladdin;PWD=sesame" जहां DSN आपका ODBC डेटा स्रोत नाम है, UID एक डेटाबेस उपयोगकर्ता आईडी है और PWD उस उपयोगकर्ता का पासवर्ड है। ये आमतौर पर कनेक्शन स्ट्रिंग में आवश्यक विशेषताएँ होती हैं, लेकिन कुछ ड्राइवरों में अन्य ड्राइवर विशिष्ट गुण होते हैं, उदाहरण के लिए "DSN=Oracle8;DBQ=gandalf;UID=aladdin;PWD=sesame" जहां DBQ आपका TAMNAMES.ORA प्रविष्टि नाम है जैसे कुछ; Oracle विशिष्ट कॉन्फ़िगरेशन विशेषता।

सभी विकल्पों में डिफ़ॉल्ट मान हैं।

डेटाबेस के लिए एक कनेक्शन खोलता है। कनेक्शन उस प्रक्रिया से जुड़ा है जिसने इसे बनाया है और केवल इसके माध्यम से पहुँचा जा सकता है। यह फ़ंक्शन कनेक्शन को संभालने के लिए नई प्रक्रियाओं को स्पॉन कर सकता है। ये प्रक्रिया समाप्त हो जाएगी अगर कनेक्शन बनाने वाली प्रक्रिया मर जाती है या यदि आप डिस्कनेक्ट / 1 कहते हैं।

यदि स्वचालित प्रतिबद्ध मोड चालू है, तो प्रत्येक क्वेरी को एक व्यक्तिगत लेनदेन माना जाएगा और इसे निष्पादित होने के बाद स्वचालित रूप से प्रतिबद्ध किया जाएगा। यदि आप एक से अधिक क्वेरी एक ही लेनदेन का हिस्सा बनना चाहते हैं तो स्वचालित कमिट मोड को बंद कर दिया जाना चाहिए। फिर आपको लेनदेन समाप्त करने के लिए स्पष्ट रूप से प्रतिबद्ध / 3 कॉल करना होगा।

डिफ़ॉल्ट टाइमआउट अनंत है

> यदि सभी तारों पर बाइनरी_स्ट्रिंग्स को चालू किया जाता है, तो उन्हें बायनेरिज़ के रूप में लौटा दिया जाएगा और परम_क्वेरी में इनपुट किए गए स्ट्रिंग्स को बायनेरिज़ होने की उम्मीद की जाएगी। उपयोगकर्ता को यह सुनिश्चित करने की आवश्यकता है कि बाइनरी एक एन्कोडिंग में है जो डेटाबेस को उम्मीद है। डिफ़ॉल्ट रूप से यह विकल्प बंद है।

डिफ़ॉल्ट परिणाम सेट के रूप में tuples की एक सूची के रूप में वापस आ रहे हैं। TupleMode विकल्प अभी भी पीछे की संगतता की कुछ डिग्री रखने के लिए मौजूद है। यदि विकल्प को बंद कर दिया गया है, तो परिणाम सेट टफल्स की सूची के बजाय सूचियों की सूची के रूप में वापस आ जाएंगे।

स्क्रॉल करने वाले कर्सर अच्छे हैं लेकिन कुछ ओवरहेड का कारण बनते हैं। कुछ कनेक्शनों के लिए गति लचीली डेटा एक्सेस की तुलना में अधिक महत्वपूर्ण हो सकती है और फिर आप कनेक्शन के लिए स्क्रॉल करने योग्य कर्सर को अक्षम कर सकते हैं, एपीआई को सीमित कर सकते हैं लेकिन गति प्राप्त कर सकते हैं।

ध्यान दें

स्क्रॉल करने योग्य_कोर्स विकल्प को बंद करने से पुराने ओडबेक-ड्राइवरों को जोड़ने में सक्षम बनाने के लिए नोट किया जाता है जो कि विफल हो जाएंगे।

यदि ट्रेस मोड चालू किया जाता है, तो ODBC ड्राइवर को SQLLOG फ़ाइल में ट्रेस लॉग लिखने के लिए कहा जाता है, जो कि इरलैंग एमुलेटर की वर्तमान निर्देशिका में रखा गया है। यह जानकारी तब उपयोगी हो सकती है जब आपको संदेह हो कि erdang ODBC एप्लिकेशन में कोई बग हो सकता है, और आपके लिए यह फ़ाइल हमारे समर्थन में भेजना प्रासंगिक हो सकता है। अन्यथा आप शायद इसका ज्यादा उपयोग नहीं करेंगे।

ध्यान दें

ConnectStr बारे में अधिक जानकारी के लिए फ़ंक्शन का विवरण देखें SQLDriverConnect [1] में।

extended_errors विकल्प एक ऑपरेशन विफल होने पर विस्तारित ODBC त्रुटि जानकारी सक्षम करता है। {error, Reason} वापस करने के बजाय {error, Reason} फेलिंग फंक्शन {error, {ODBCErrorCode, NativeErrorCode, Reason}} । ध्यान दें कि डेटाबेस-इंडिपेंडेंट कोड लिखते समय यह जानकारी बहुत कम काम आती है, लेकिन किसी ज्ञात अंतर्निहित डेटाबेस से निपटने के दौरान अधिक परिष्कृत त्रुटि से निपटने में सहायता प्रदान कर सकती है।

  • ODBCErrorCode ODBC ड्राइवर द्वारा दी गई ODBC त्रुटि स्ट्रिंग है।
  • NativeErrorCode अंतर्निहित डेटाबेस द्वारा लौटाया गया संख्या त्रुटि कोड है। संभव मान और उनके अर्थ उपयोग किए जा रहे डेटाबेस पर निर्भर हैं।
  • Reason फ़ील्ड के अनुसार Reason है जब विस्तारित त्रुटियाँ सक्षम नहीं हैं।
ध्यान दें

वर्तमान कार्यान्वयन सी में लिखे एक पोर्ट प्रोग्राम को जन्म देता है जो वास्तविक ODBC ड्राइवर का उपयोग करता है। इस पोर्ट प्रोग्राम के लिए Erlang ODBC एप्लिकेशन से कनेक्ट करने के लिए 5000 मिसे का डिफ़ॉल्ट टाइमआउट है। इस टाइमआउट को ODBC एप्लिकेशन के लिए मिलीसेकंड की संख्या के साथ एक एप्लिकेशन विशिष्ट पर्यावरण चर 'port_timeout' सेट करके बदला जा सकता है। जैसे: [{odbc, [{port_timeout, 60000}]}] इसे 60 सेकंड तक सेट करने के लिए।

डिस्कनेक्ट (Ref) -> ठीक | {त्रुटि, कारण}

प्रकार

एक डेटाबेस के लिए एक कनेक्शन बंद कर देता है। यह उन सभी प्रक्रियाओं को भी समाप्त कर देगा, जो कनेक्शन खोले जाने पर उत्पन्न हो सकती हैं। यह कॉल हमेशा सफल होगा। यदि कनेक्शन को इनायत से काट नहीं किया जा सकता है तो उसे बेरहमी से मार दिया जाएगा। हालाँकि आपको परिणाम के रूप में एक त्रुटि संदेश प्राप्त हो सकता है यदि आप किसी अन्य प्रक्रिया द्वारा शुरू किए गए कनेक्शन को डिस्कनेक्ट करने का प्रयास करते हैं।

description_table (रेफरी, टेबल) ->
description_table (रेफरी, टेबल, टाइमआउट) -> {ठीक है, विवरण} | {त्रुटि, कारण}

प्रकार

तालिका के स्तंभों के ODBC डेटा प्रकारों का पता लगाने के लिए डेटाबेस को क्वेरी करता है।

पहला (रेफ) ->
पहला (रेफ, टाइमआउट) -> {चयनित, ColNames, Rows} | {त्रुटि, कारण}

प्रकार

परिणाम सेट की पहली पंक्ति लौटाता है और इस पंक्ति में एक कर्सर रखता है।

अंतिम (Ref) ->
अंतिम (Ref, TimeOut) -> {चयनित, ColNames, Rows} | {त्रुटि, कारण}

प्रकार

परिणाम सेट की अंतिम पंक्ति लौटाता है और इस पंक्ति में एक कर्सर रखता है।

अगला (Ref) ->
अगला (Ref, टाइमऑट) -> {चयनित, ColNames, Rows} | {त्रुटि, कारण}

प्रकार

परिणाम की अगली पंक्ति को वर्तमान कर्सर स्थिति के सापेक्ष सेट करता है और इस पंक्ति में कर्सर को रखता है। यदि इस फ़ंक्शन को लौटाया गया मान कहा जाता है, तो परिणाम सेट की अंतिम पंक्ति पर कर्सर को तैनात किया जाता है, तो {selected, ColNames,[]} ei पंक्ति मानों की सूची खाली है, यह दर्शाता है कि लाने के लिए अधिक डेटा नहीं है।

param_query (Ref, SQLQuery, Params) ->
param_query (Ref, SQLQuery, Params, TimeOut) -> ResultTuple | {त्रुटि, कारण}

प्रकार

संग्रहीत प्रक्रियाओं के लिए IN, OUT और IN OUT पैरामीटर मोड में परिभाषित करता है।

एक परिसीमित SQL क्वेरी निष्पादित करता है। एक उदाहरण के लिए एरलांग ODBC उपयोगकर्ता गाइड में "Using the Erlang API" देखें।

ध्यान दें

उस तालिका के प्रत्येक स्तंभ के लिए अपेक्षित ODBC डेटा प्रकार का पता लगाने के लिए function_table / [2,3] का उपयोग करें। यदि किसी कॉलम में एक डेटा प्रकार है जिसे बड़े अक्षरों के साथ वर्णित किया गया है, तो यह वर्तमान में param_query फ़ंक्शन द्वारा समर्थित नहीं है। बहुत जानते हैं कि कौन सा Erlang डेटा प्रकार ODBC डेटा प्रकार से मेल खाता है, उपयोगकर्ता के गाइड में Erlang को ODBC डेटा प्रकार mapping

prev (रेफ) ->
prev (ConnectionReference, TimeOut) -> {चयनित, ColNames, Rows} | {त्रुटि, कारण}

प्रकार

परिणाम की पिछली पंक्ति को वर्तमान कर्सर स्थिति के सापेक्ष सेट करता है और इस पंक्ति में कर्सर को रखता है।

start () ->
start (प्रकार) -> ठीक | {त्रुटि, कारण}

प्रकार

Odbc एप्लिकेशन को प्रारंभ करता है। डिफ़ॉल्ट प्रकार अस्थायी है। See application(3)

रोक () -> ठीक है

Odbc एप्लिकेशन को रोकता है। See application(3)

sql_query (Ref, SQLQuery) ->
sql_query (Ref, SQLQuery, टाइमऑट) -> ResultTuple | [परिणाम] | {त्रुटि, कारण}

प्रकार

SQL क्वेरी या SQL क्वेरी का एक बैच निष्पादित करता है। यदि यह एक {selected, ColNames, Rows} क्वेरी है, तो परिणाम सेट को प्रारूप {selected, ColNames, Rows} पर लौटा दिया जाता है। अन्य क्वेरी के लिए टपल {updated, NRows} को लौटाया जाता है, और {updated, NRows} प्रश्नों के लिए, यदि ड्राइवर उनका समर्थन करता है, तो यह फ़ंक्शन परिणाम ट्यूपल्स की सूची भी लौटा सकता है।

ध्यान दें

कुछ ड्राइवरों को प्रभावित पंक्तियों की संख्या की जानकारी उपलब्ध नहीं हो सकती है और फिर वापसी मान {updated, undefined} हो सकता है।

स्तंभ नामों की सूची उसी तरह से ColName जाती है जैसे किसी पंक्ति के मानों की सूची, जैसे पहला ColName एक पंक्ति में पहले ColName से जुड़ा होता है।


select_count (Ref, SelectQuery) ->
select_count (Ref, SelectQuery, TimeOut) -> {ठीक है, NrRows} | {त्रुटि, कारण}

प्रकार

SQL चयन क्वेरी।

SQL चयन क्वेरी को निष्पादित करता है और कनेक्शन के साथ सेट परिणाम को संबद्ध करता है। परिणाम सेट में पहली पंक्ति से पहले एक कर्सर तैनात किया जाता है और टपल {ok, NrRows} को लौटा दिया जाता है।

ध्यान दें

कुछ ड्राइवरों को परिणाम सेट में पंक्तियों की संख्या की जानकारी नहीं हो सकती है, तो NrRows का मान undefined

चुनें (Ref, स्थिति, N) ->
चयन करें (Ref, स्थिति, N, TimeOut) -> {चयनित, ColNames, Rows} | {त्रुटि, कारण}

प्रकार

चयन रणनीति, यह निर्धारित करती है कि चयन शुरू करने के लिए निर्धारित परिणाम में कौन सी पंक्ति है।

परिणाम सेट में एक पंक्ति संख्या को इंगित करना चाहिए। जब विकल्प relative साथ एक साथ उपयोग किया जाता है, तो इसे वर्तमान कर्सर स्थिति से ऑफसेट के रूप में उपयोग किया जाएगा, जब विकल्प के साथ एक साथ उपयोग किया जाता है तो इसे एक पंक्ति संख्या के रूप में व्याख्या किया जाएगा।

परिणाम सेट की N लगातार पंक्तियों का चयन करता है। यदि Position next तो यह शब्दगत रूप से next/[1,2] N बार कॉल करने के बराबर है। यदि Position {relative, Pos} , तो पहली चयनित पंक्ति को निर्धारित करने के लिए स्थिति को वर्तमान कर्सर स्थिति से ऑफसेट के रूप में उपयोग किया जाएगा। यदि Position {absolute, Pos} , तो Pos चयनित पहली पंक्ति की संख्या होगी। इस फ़ंक्शन के वापस आने के बाद कर्सर अंतिम चयनित पंक्ति में स्थित है। यदि कम है, तो परिणाम के बाईं ओर स्थित N पंक्तियों की लंबाई N से कम होगी। यदि चयन करने वाली पहली पंक्ति परिणाम सेट की अंतिम पंक्ति से परे होती है, तो लौटाया गया मान {selected, ColNames,[]} , पंक्ति मानों की सूची खाली है, यह दर्शाता है कि लाने के लिए अधिक डेटा नहीं है।

संदर्भ

[१]: Microsoft ODBC 3.0, प्रोग्रामर का संदर्भ और SDK गाइड
Http://msdn.microsoft.com/ भी देखें