मेरे पास एक सिस्टम में SQLite डेटाबेस है, मुझे SQLite में Oracle डेटाबेस में संग्रहीत डेटा निकालने की आवश्यकता है। मैं यह कैसे करु?SQLite से Oracle
उत्तर
आपको SQLite को एक टेक्स्ट फ़ाइल (प्रारूप में से कुछ नहीं) में कनवर्ट करना होगा और फिर टेक्स्ट से डेटाबेस लोड करने के लिए ओरेकल का उपयोग करना होगा (स्रोत http://www.orafaq.com/wiki/SQLite है)। आप SQLite इंटरैक्टिव शैल से .dump
कमांड का उपयोग टेक्स्ट फ़ाइल में डंप करने के लिए कर सकते हैं (वाक्यविन्यास के लिए the docs देखें)।
एसक्यूएल लोडर एक उपयोगिता है जो एक सीमित पाठ फ़ाइल पढ़ेगी और इसे एक ऑरैकल डेटाबेस में आयात करेगी। आपको मानचित्रण करने की आवश्यकता होगी कि आपकी फ्लैट फ़ाइल से प्रत्येक कॉलम स्क्लाइट मैचों से बाहर ओरेकल डेटाबेस में संबंधित एक से मेल खाता है। यहां एक अच्छा FAQ है जो आपको प्रारंभ करने में मदद कर सकता है।
ओरेकल Oracle Database Mobile Server (जिसे पहले ओरेकल डेटाबेस लाइट कहा जाता है) नामक उत्पाद प्रदान करता है जो आपको SQLite और Oracle डेटाबेस के बीच सिंक्रनाइज़ करने की अनुमति देता है। यह स्केलेबल द्वि-दिशात्मक सिंक, स्कीमा मैपिंग, सुरक्षा इत्यादि प्रदान करता है। मोबाइल सर्वर सिंक्रोनस और एसिंक्रोनस डेटा सिंक दोनों का समर्थन करता है। यदि यह एक बार निर्यात से अधिक है और आपको अपने SQLite और Oracle डेटाबेस को सिंक में रखने की आवश्यकता है, तो यह एक अच्छा टूल है!
अस्वीकरण: मैं ओरेकल डेटाबेस मोबाइल सर्वर के लिए उत्पाद प्रबंधक में से एक हूं, इसलिए मैं थोड़ा पक्षपातपूर्ण हूं। हालांकि, मोबाइल सर्वर वास्तव में सिंक में अपने SQLite (या बर्कले डीबी) और ओरेकल डेटाबेस को रखने के लिए उपयोग करने के लिए एक शानदार टूल है।
यदि आप एक डेवलपर हैं, तो आप सिंक करने के लिए एक एप्लिकेशन विकसित कर सकते हैं। आप
SELECT name FROM sqlite_master WHERE type='table'
करते हैं, तालिका नाम पाने के लिए चाहते हैं तो आप कर सकता है उन्हें Oracle में (आप पहले Oracle में DROP TABLE tablename
कर सकते हैं, एक संघर्ष से बचने के लिए, यह मानते हुए SQLite आधिकारिक हो जाएगा) फिर से बनाने CREATE TABLE
आदेशों के साथ । हर एक के लिए कॉलम हो रही लेता
SELECT sql FROM sqlite_master WHERE type='table' and name='MyTable'
और फिर आप परिणाम पार्स करने के लिए है:
string columnNames = sql.replace(/^[^\(]+\(([^\)]+)\)/g, '$1').replace(/ [^,]+/g, '').split(',');
string[] columnArray = columnNames.Split(',');
foreach (string s in columnArray)
{
// Add column to table using:
// ALTER TABLE MyTable ADD COLUMN s NVARCHAR(250)
}
एक StringBuilder
अपने INSERT
आदेश बनाने के लिए अपने कॉलम के साथ तालिका नाम इकट्ठा करने के लिए इस्तेमाल किया जा सकता । मान जोड़ने के लिए, यह आपके लूप के दौरान प्रारंभिक क्वेरी से वापस आने वाले तालिका नामों के माध्यम से प्रत्येक तालिका के लिए SELECT * FROM MyTable
करने का विषय होगा। आप datatable आप लौट रहे थे की पंक्तियों के स्तंभों पुनरावृति और StringBuilder
में मान जोड़ते हैं:
INSERT INTO MyTable (
+ Columna, columnB, आदि + ) VALUES (
DataRow [0], DataRow [1], आदि + )
।
बिलकुल ठीक नहीं है, हालांकि - आप लूप के माध्यम से कॉलम नाम और उसके डेटा को जोड़कर डेटा भरते हैं। आप ऊपर foreach
लूप में s
जोड़कर कॉलम नाम प्राप्त कर सकते हैं। प्रत्येक कॉलम मान को foreach
लूप का उपयोग करके सेट किया जाता है जो आपको प्रत्येक object obj in drData.ItemArray
देता है। यदि आपके पास स्ट्रिंग फ़ील्ड्स हैं, तो यह आसान है, आप अपनी क्वेरी में प्रत्येक कॉलम मान के लिए StringBuilder
पर obj.ToString()
जोड़ें। फिर आप प्रत्येक पंक्ति के लिए सभी कॉलम मान एकत्र करने के बाद क्वेरी चलाते हैं। आप प्रत्येक पंक्ति के लिए एक नया StringBuilder
का उपयोग करते हैं - इसे INSERT INTO MyTable (
+ कॉलम ए, कॉलम बी आदि पर रीसेट करने की आवश्यकता है।प्रत्येक नई पंक्ति से पहले + ) VALUES (
, इसलिए नए कॉलम मानों को जोड़ा जा सकता है।
यदि आपके पास मिश्रित डेटाटाइप (यानी DATE
, BLOB
इत्यादि) हैं, तो आपको कॉलम प्रकारों को एक सूची या सरणी में स्टोर करने की आवश्यकता होगी, फिर उस सूचकांक को निर्धारित करने के लिए काउंटर का उपयोग करें सूची/सरणी स्लॉट और प्रकार प्राप्त करें, इसलिए आप जानते हैं कि ऑब्जेक्ट का उपयोग किसी ऑब्जेक्ट में कैसे किया जा सकता है - चाहे इसका मतलब है कि to_date()
परिणाम के साथ स्वरूपण के साथ, दिनांक के बाद (SQLite इन्हें प्रारूप के साथ दिनांक तारों के रूप में संग्रहीत करता है yyyy-MM-dd HH:mm:ss
), या इसे OracleParameter
पर BLOB
के लिए जोड़कर उसे RunOracleCommand
फ़ंक्शन के साथ भेजना। (मैं इस में नीचे जाना नहीं था।)
यह सब लाना एक साथ इस पैदावार:
string[] columnArray = null;
DataTable dtTableNames = GetSQLiteTable("SELECT name FROM sqlite_master WHERE type='table'");
if (dtTableNames != null && dtTableNames.Rows != null)
{
if (dtTableNames.Rows.Count > 0)
{
// We have tables
foreach (DataRow dr in dtTableNames.Rows)
{
// Do everything about this table here
StringBuilder sb = new StringBuilder();
sb.Append("INSERT INTO " + tableName + " ("); // we will collect column names here
string tableName = dr["NAME"] != null ? dr["NAME"].ToString() : String.Empty;
if (!String.IsNullOrEmpty(tableName))
{
RunOracleCommand("DROP TABLE " + tableName);
RunOracleCommand("CREATE TABLE " + tableName);
}
DataTable dtColumnNames = GetSQLiteTable("SELECT sql FROM sqlite_master WHERE type='table' AND name='"+tableName+"'");
if (dtColumnNames != null && dtColumnNames.Rows != null)
{
if (dtColumnNames.Rows.Count > 0)
{
// We have columns
foreach (DataRow drCol in dtTableNames.Rows)
{
string sql = drCol["SQL"] != null ? drCol["SQL"].ToString() : String.Empty;
if (!String.IsNullOrEmpty(sql))
{
string columnNames = sql.replace(/^[^\(]+\(([^\)]+)\)/g, '$1').replace(/ [^,]+/g, '').split(',');
columnArray = columnNames.Split(',');
foreach (string s in columnArray)
{
// Add column to table using:
RunOracleCommand("ALTER TABLE " + tableName + " ADD COLUMN " + s + " NVARCHAR(250)"); // can hard-code like this or use logic to determine the datatype/column width
sb.Append("'" + s + "',");
}
sb.TrimEnd(",");
sb.Append(") VALUES (");
}
}
}
}
// Get SQLite Table data for insertion to Oracle
DataTable dtTableData = GetSQLiteTable("SELECT * FROM " + tableName);
if (dtTableData != null && dtTableData.Rows != null)
{
if (dtTableData.Rows.Count > 0)
{
// We have data
foreach (DataRow drData in dtTableData.Rows)
{
StringBuilder sbRow = sb; // resets to baseline for each row
foreach (object obj in drData.ItemArray)
{
// This is simplistic and assumes you have string data for an NVARCHAR field
sbRow.Append("'" + obj.ToString() + "',");
}
sbRow.TrimEnd(",");
sbRow.Append(")");
RunOracleCommand(sbRow.ToString());
}
}
}
}
}
}
आप इस सब के सब एक RunOracleCommand()
शून्य समारोह है कि किसी SQL आदेश लेने के लिए और के खिलाफ चला सकते है मानता है एक ओरेकल डीबी, और GetSQLiteTable()
फ़ंक्शन जो SQL सर्वर को पास करके SQLite DB से डेटाटेबल वापस कर सकता है।
ध्यान दें कि यह कोड अनचाहे है, क्योंकि मैंने इसे सीधे इस पोस्ट में लिखा था, लेकिन यह उस कोड पर आधारित है जिसे मैंने ओरेकल को SQLite में सिंक करने के लिए लिखा था, जिसका परीक्षण और काम किया गया है।
- 1. कम से Oracle SQL
- 2. कैसे Oracle
- 3. कैसे Oracle
- 4. Convert टाइमस्टैम्प/यूटीसी से ईएसटी Oracle SQL
- 5. डिफ़ॉल्ट रूप से ORACLE 11g केस असंवेदनशील
- 6. SQLite से SQL Server
- 7. sqlite से postgresql
- 8. आरओआर SQLite से PostgreSQL
- 9. Oracle डाटाबेस लिंक
- 10. Oracle SQL डेवलपर
- 11. Node.js + Oracle 9i डाटाबेस
- 12. कैसे Oracle की sdo_distance
- 13. (Oracle) कैसे पृष्ठांकन
- 14. Oracle की SIDs
- 15. ORACLE SQL listagg फ़ंक्शन
- 16. बिटवाइस अनन्य या Oracle
- 17. वहाँ Oracle की% प्रकार
- 18. LINQPad और Oracle
- 19. समूह उर्फ (Oracle) द्वारा
- 20. Oracle SQL: वक्तव्य
- 21. कैसे Oracle SQL
- 22. SQLite - SQLite डेटाबेस से डेटा पढ़ने का सबसे तेज़ तरीका?
- 23. SQLite अपवाद: SQLite व्यस्त
- 24. SQLite
- 25. SQLite
- 26. SQLite
- 27. SQLite
- 28. SQLite:
- 29. SQLite
- 30. SQLite कई से अधिक रिश्ते?