يتم تشغيل استعلام تحديث في SQL Server ولكن ليس في Oracle
-
28-09-2019 - |
سؤال
أحتاج إلى استعلام التحديث هذا لتشغيله على كل من SQL Server و Oracle. إصدار Oracle الخاص بنا هو 10.2 إذا كان ذلك مهمًا. عندما أقوم بتشغيل الاستعلام في Oracle ، أحصل على "خطأ ORA-00933: أمر SQL لم ينته بشكل صحيح". ما الذي يجب علي فعله للحصول على هذا في Oracle؟
UPDATE dbo.tableUpdate
SET fieldA = tt.fieldB
FROM dbo.tableTranslate tt
WHERE
tt.fieldC = dbo.tableUpdate.fieldC
AND
tt.fieldD = dbo.tableUpdate.fieldA
AND
1 = (
SELECT COUNT(tblTrans.fieldD)
FROM dbo.tableTranslate tblTrans
WHERE
tblTrans.fieldC = dbo.tableUpdate.fieldC
AND
tblTrans.fieldD = dbo.tableUpdate.fieldA
)
المحلول
التحديث ... من بناء الجملة غير صالح لـ Oracle. ستحتاج إلى استخدام مسمة فرعية ، مثل هذا:
UPDATE dbo.tableUpdate t
SET t.fieldA = (SELECT tt.fieldB
FROM dbo.tableTranslate tt
WHERE tt.fieldC = t.fieldC
AND tt.fieldD = t.fieldA
)
WHERE 1 = (
SELECT COUNT(tblTrans.fieldD)
FROM dbo.tableTranslate tblTrans
WHERE tblTrans.fieldC = t.fieldC
AND tblTrans.fieldD = t.fieldA
)
نصائح أخرى
بناء الجملة للاستعلام الفرعي المتعلق بالمشاركة يختلف قليلاً في أوراكل.
UPDATE dbo.tableUpdate
SET fieldA = (select tt.fieldB
FROM dbo.tableTranslate tt
WHERE
tt.fieldC = dbo.tableUpdate.fieldC
AND
tt.fieldD = dbo.tableUpdate.fieldA)
AND
1 = (
SELECT COUNT(tblTrans.fieldD)
FROM dbo.tableTranslate tblTrans
WHERE
tblTrans.fieldC = dbo.tableUpdate.fieldC
AND
tblTrans.fieldD = dbo.tableUpdate.fieldA)
ستحتاج إلى إعادة كتابة استفسارك تمامًا عن Oracle. بعض الأشياء التي لن تعمل في Oracle 10.2:
from
جملة فيupdate
الجملة (ستحتاج إلى كتابة مجموعة فرعية لهذا)dbo
المخطط ، ما لم يكن لديك مستخدم بالفعلdbo
في Oracle امتلاك الجدول الذي تحاول تحديثه
لا تنتمي إلى StackOverflow