2010-02-26 7 views
0

J'ai une vue. l'une des colonnes de la vue contient la fonction NVL (comme nvl(col1,col2) colA). et si je l'ai fait la requête sur ce que je vais afficher certains enregistrementsProblème avec ROWNUM

Ex: select calA from view1;

et si j'utilise la même requête que vue en ligne et j'utilise rownum dans la clause where il affiche rien

Ex: Select * from (select calA from view1) where rownum <10;

Je reçois les mêmes dossiers si je

  • essayer sans rownum dans la clause where
  • supprimer NVL de la vue
+0

est-CALA censé lire colA ? –

+0

Il semble que quelque chose d'autre ne va pas, mais vous avez trop simplifié votre code pour que nous ne puissions pas voir la cause. Pouvez-vous fournir la définition complète de la vue? –

Répondre

0

On dirait que vous avez un autre problème.

J'ai essayé ce qui suit, et votre SELECT a bien fonctionné (retour 9 lignes):

CREATE TABLE test_data (col1 INT, col2 INT); 

INSERT INTO test_data (
    SELECT CASE WHEN MOD(ROWNUM,2) = 1 THEN 
       NULL 
       ELSE 
       ROWNUM/2 
       END col1, 
     ROWNUM col2 
    FROM dual 
    CONNECT BY ROWNUM <= 20 
); 

CREATE OR REPLACE VIEW view1 AS (
    SELECT NVL(col1, col2) calA FROM test_data 
); 

SELECT * FROM (SELECT calA FROM view1) WHERE ROWNUM <10; 

Pourriez-vous s'il vous plaît poster la source de votre point de vue, la conception de votre table et quelques informations supplémentaires sur vos données?

0

Cela ne devrait pas poser problème:

where rownum < 10 

Mais cette aurait faire aucune ligne à retourner, en raison de la ROWNUM manière est générée:

where rownum > 10 
      --^Greater than