سؤال

أنا باستخدام موفر OLEDB على ADO.Net الاتصال إلى قاعدة بيانات Oracle.في حلقة بلدي, وأنا أفعل إدراج:

insert into ps_tl_compleave_tbl values('2626899', 0, TO_DATE('01/01/2002', 'MM/DD/YYYY'), 'LTKN', 'LTKN', '52', TO_DATE('01/01/2002', 'MM/DD/YYYY'), 16.000000, 24.000)insert into ps_tl_compleave_tbl values('4327142', 0, TO_DATE('03/23/2002', 'MM/DD/YYYY'), 'LTKN', 'LTKN', '51', TO_DATE('03/23/2002', 'MM/DD/YYYY'), 0.000000, 0.000)

أول إدراج ينجح ولكن الثاني يعطي خطأ:

ORA-00933: SQL command not properly ended

ما الخطأ الذي فعلته ؟

هل كانت مفيدة؟

المحلول

يبدو لي أنك في عداد المفقودين ; بين بيانين:
insert into ps_tl_compleave_tbl values('2626899', 0, TO_DATE('01/01/2002', 'MM/DD/YYYY'), 'LTKN', 'LTKN', '52', TO_DATE('01/01/2002', 'MM/DD/YYYY'), 16.000000, 24.000)
;
insert into ps_tl_compleave_tbl values('4327142', 0, TO_DATE('03/23/2002', 'MM/DD/YYYY'), 'LTKN', 'LTKN', '51', TO_DATE('03/23/2002', 'MM/DD/YYYY'), 0.000000, 0.000)
;
حاول إضافة ; واسمحوا لنا أن نعرف.

نصائح أخرى

في .صافي, عندما نحاول تنفيذ واحد Oracle SQL باستخدام فاصلة منقوطة في نهاية المطاف.ستكون النتيجة oracle خطأ:ora-00911:حرف غير صالح.حسنا, أنت الرقم واحد SQL لا تحتاج منقوطة ، ولكن ماذا عن تنفيذ 2 SQL في سلسلة واحدة على سبيل المثال:

Dim db As Database = DatabaseFactory.CreateDatabase("db")
Dim cmd As System.Data.Common.DbCommand
Dim sql As String = ""

sql = "DELETE FROM iphone_applications WHERE appid = 1; DELETE FROM iphone_applications WHERE appid = 2; "

cmd = db.GetSqlStringCommand(sql)
db.ExecuteNonQuery(cmd)

رمز أعلاه سوف تعطيك نفس أوراكل خطأ:ora-00911:حرف غير صالح.

الحل لهذه المشكلة هو التفاف الخاص بك 2 Oracle SQL البيانات مع BEGIN و END; بناء الجملة ، على سبيل المثال:

sql = "BEGIN DELETE FROM iphone_applications WHERE appid = 1; DELETE FROM iphone_applications WHERE appid = 2; END;"

المجاملة: http://www.lazyasscoder.com/Article.aspx?id=89&title=ora-00911%3A+invalid+character+when+executing+multiple+Oracle+SQL+statements

في أوراكل منقوطة ';' يستخدم فقط في sqlplus.عند استخدام ODBC/JDBC OLEDB, الخ لا تضع فاصلة منقوطة في نهاية البيان.في الحالة المذكورة أعلاه أنت بالفعل تنفيذ 2 تصريحات مختلفة لذا فإن أفضل طريقة للتعامل مع هذه المشكلة هو استخدام 2 البيانات بدلا من محاولة الجمع في بيان واحد منذ لا يمكنك استخدام منقوطة.

نصف القولون بعد أول إدراج?

Oracle SQL يستخدم منقوطة ;كما في نهاية البيان علامة.

وسوف تحتاج إلى إضافة ؛ بعد عناء إدراج البيانات.

ملحوظة::التي يفترض أيضا ADODB سيسمح 2 إدراج في مكالمة واحدة.

البديل قد يكون التفاف كل المكالمات في كتلة ،

BEGIN
      insert (...) into (...);
      insert (...) into (...);
END;

في حلقة كنت لا إعادة تهيئة بلدي بـ stringbuilder ...وهكذا متعددة insert نشرت لي.

شكرا على مساعدتك على أي حال!!

إنه طريق طويل ولكن في أول إدراج sql تنسيق التاريخ صالحة لكل من المملكة المتحدة/الولايات المتحدة ، والثاني إدخال غير صالح إذا Oracle DB هو الإعداد المملكة المتحدة تنسيق التاريخ ، وأنا أدرك أن كنت قد استخدمت TO_DATE وظيفة ولكن أنا لا أرى أي شيء آخر ...

هو منقوطة اللازمة من OLE_DB ?ليس المطلوب من معظم API ؟

على ADO.NET موفر OLE DB هو generic access البيانات حيث لا يكون محدد مزود قاعدة البيانات الخاصة بك.استخدام OracleConnection وآخرون في الأفضلية OleDbConnection على اتصال قاعدة بيانات Oracle.

بالإضافة إلى منقوطة المشكلة ، أنا أنصحك بشدة أن ننظر إلى ربط المتغيرات.الفشل في استخدامها يمكن أن تسبب أداء قاعدة البيانات مشاكل على الطريق.رمز أيضا يميل إلى أن يكون أكثر نظافة.

قد تكون المشكلة التي لديك معلمة المتغير الذي null يتم إدراجها في الاستعلام.هذا ما كانت مشكلتي.مرة واحدة أعطى المعلمة قيمة افتراضية من سلسلة فارغة ، عمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top