Oracle10gR2でうまくいくSQLが11gR2だとORA-00904がはかれる
883292Sep 8 2011 — edited Sep 8 2011以下の4点がそろったSQLは10gR2では流れるが11gR2ではORA-00904のエラーが出て流れません。
これはどういったことなのでしょうか。
- *を使っている
- テーブルに別名をつけている
- 階層問合せを使っている
- SAMPLE_USER.ID_TABLE のような形でオブジェクトを見ている
どれか1個が欠けると普通に動きます。
理由をご存じの方がいらしたらお願いします。
サンプルのSQLを載せます。
CREATE USER SAMPLE_USER IDENTIFIED BY SAMPLE_USER;
GRANT DBA TO SAMPLE_USER;
CREATE TABLE SAMPLE_USER.ID_TABLE(
ID number(9, 0) primary key,
PARENT_ID number(9, 0)
);
INSERT INTO SAMPLE_USER.ID_TABLE (ID, PARENT_ID) VALUES (1,null);
INSERT INTO SAMPLE_USER.ID_TABLE (ID, PARENT_ID) VALUES (2,1);
INSERT INTO SAMPLE_USER.ID_TABLE (ID, PARENT_ID) VALUES (3,2);
INSERT INTO SAMPLE_USER.ID_TABLE (ID, PARENT_ID) VALUES (4,3);
COMMIT;
この前提で、SAMPLE_USER以外のユーザから以下を流すとORA-00904のエラーが出ます。
SELECT T.*,
LEVEL
FROM SAMPLE_USER.ID_TABLE T
START WITH T.PARENT_ID IS NULL
CONNECT BY PRIOR T.ID = T.PARENT_ID
ORDER BY LEVEL;