يتم تشغيل استعلام تحديث في SQL Server ولكن ليس في Oracle

StackOverflow https://stackoverflow.com/questions/4097538

سؤال

أحتاج إلى استعلام التحديث هذا لتشغيله على كل من 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:

  1. from جملة في update الجملة (ستحتاج إلى كتابة مجموعة فرعية لهذا)
  2. dbo المخطط ، ما لم يكن لديك مستخدم بالفعل dbo في Oracle امتلاك الجدول الذي تحاول تحديثه
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top