حيث تنضم الظروف في الاستعداد الفرعي أثناء استخدام ANSI
سؤال
لماذا لا تعمل؟
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 تستخدمه؟
لا تنتمي إلى StackOverflow