Gestion de bases de données

Après la mise à niveau vers 10g, erreur ORA-01788 sur une requête utilisant la pseudo-colonne LEVEL

S'applique à

Oracle Server - Enterprise Edition - version 10.2.0.1 et ultérieures [version 10.2 et ultérieures]
Les informations de ce document s'appliquent à toutes les plateformes.

Symptômes

Après une mise à niveau vers Oracle 10g, une erreur ORA-1788 apparaît sur une requête qui utilise la pseudo-colonne LEVEL. Cette requête fonctionnait correctement en 9i.

Exemple :

En 9i :

SQL> select level from dual; 

LEVEL 
---------- 
0

En 10g :

SQL> select level from dual; 
select level from dual 
* 
ERROR at line 1: 
ORA-01788: CONNECT BY clause required in this query block

Cause

Ce comportement est normal en 10g. La pseudo-colonne LEVEL n'a de sens que dans les requêtes hiérarchiques, c'est-à-dire les requêtes comportant une clause CONNECT BY. Toutefois, ce mot-clé était accepté sans CONNECT BY jusqu'à la version 10g.

Depuis la version 10g, un message d'erreur est renvoyé lorsque LEVEL apparaît dans un bloc de requête sans clause CONNECT BY.

Solution

Ajoutez une clause CONNECT BY au bloc de requête qui utilise la pseudo-colonne LEVEL :

SQL> select level from dual connect by 1<0; 

LEVEL 
---------- 
1

Vous pouvez aussi contourner le problème en réglant le paramètre _allow_level_without_connect_by à TRUE avant d'exécuter la requête :

SQL> alter session set "_allow_level_without_connect_by"=TRUE; 

Session altered. 

SQL> select level from dual; 

LEVEL 
---------- 
0