Oracle 10.2 SQL menimbulkan cabaran apabila cuba menggunakan 'lajur ungkapan huruf besar' dalam klausa WHERE. Ralat "ORA-00904: "%s: pengecam tidak sah" ditemui disebabkan oleh susunan logik pemprosesan pernyataan SQL.
Pernyataan SQL diproses dalam perkara berikut jujukan:
Dalam klausa WHERE bagi pertanyaan asal:
SELECT ename , job , CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END AS department FROM emp WHERE department = 'SALES'
The Lajur 'jabatan', yang dijana oleh ungkapan CASE, belum wujud lagi semasa penilaian klausa WHERE, klausa WHERE tidak boleh menggunakannya untuk perbandingan.
Kepada. atasi had ini, sertakan pertanyaan dalam subkueri:
SELECT * FROM ( SELECT ename , job , CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END AS department FROM emp ) tmp WHERE department = 'SALES' ;
Sebagai alternatif, salin ungkapan CASE dalam klausa WHERE:
SELECT ename , job , CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END AS department FROM emp WHERE CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END = 'SALES' ;
Dalam kes di mana klausa WHERE syarat secara langsung sepadan dengan nombor jabatan tertentu, pilihan yang dipermudahkan mungkin:
SELECT ename , job , 'SALES' AS department FROM emp WHERE deptno = 20 ;
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Lajur Ekspresi CASE dalam Klausa Oracle 10.2 WHERE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!