حيث تنضم الظروف في الاستعداد الفرعي أثناء استخدام ANSI

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

  •  21-09-2019
  •  | 
  •  

سؤال

لماذا لا تعمل؟

SELECT a.*
FROM dual a
     JOIN (SELECT * FROM dual WHERE 1=1) b
     ON (1=1);

أحصل على "ORA-00900: بيان SQL غير صالح". هل هناك طريقة لاستخدام أي شرط داخل الاستعداد الفرعي؟

تحرير: الإصدار 9.2

SELECT *
FROM v$version

إصدار Oracle9i Enterprise Edition 9.2.0.8.0 - 64 بت

ما يلي ينفذ على ما يرام:

SELECT a.*
FROM dual a
     JOIN (SELECT * FROM dual /*WHERE 1=1*/) b
     ON (1=1)
هل كانت مفيدة؟

المحلول

إنه يعمل بالنسبة لي في 9.2 (إصدار 32 بت هو الفرق الوحيد):

SQL> SELECT a.*
  2  FROM dual a
  3       JOIN (SELECT * FROM dual WHERE 1=1) b
  4       ON (1=1);

D
-
X

SQL> quit
Disconnected from Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
With the OLAP and Oracle Data Mining options
JServer Release 9.2.0.8.0 - Production

نصائح أخرى

ما هو إصدار الذي تستخدمه؟

نفس SQL بالضبط يعمل بشكل جيد بالنسبة لي (Oracle Database 10G Express Edition الإصدار 10.2.0.1.0).

أوراكل أدناه 9i لا يدعم ANSI انضم إلى بناء الجملة.

استخدم هذا إذا كنت على 8i و تحت:

SELECT  a.*
FROM    dual a,
        (
        SELECT  *
        FROM    dual
        WHERE   1 = 1
        ) b
WHERE   1 = 1

يبدو الأمر صحيحًا بالنسبة لي وأنا قادر على تنفيذه في 10G ، لكنه فشل مع 8i ، أي إصدار من Oracle تستخدمه؟

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