2013-05-24 2 views
3

Je suis coincé avec la création d'une vue dans Oracle, mais avant de créer la vue, je la teste toujours en premier et j'ai toujours cette erreur: Ora-00904.Ora-00904 - Erreur lors de la création d'une vue

C'est la situation. Je celui ensemble de la requête laisser dire la requête A que je dois combiné à l'aide UNION ALL avec le de requête A se avec seulement quelques modifications appliquées à créer un autre plus grand ensemble de la requête - Requête B. La principale contrainte qui m'empêche de faire cela est la conception de la base de données, et je ne suis pas en position dans l'entreprise pour la changer, donc je dois m'y adapter. Requête A unions Demande A pour 6 fois création Demande B. La contrainte Majeure supplémentaire est La requête B provient d'un seul utilisateur de base de données, mais il y a 54 utilisateurs de base de données avec les mêmes structures que j'ai besoin d'extraire la même requête. la requête B (db user1) syndicats requêtes B (db user2) syndicats requêtes B (db user3) et ainsi de suite jusqu'à 54 puis en créant enfin la requête C --- la sortie finale. Mon script a déjà atteint 6048 lignes, puis j'ai eu ce problème que je ne reçois pas lorsque je le test Query A et Query B. Tous mes noms de table, noms de propriétaires et noms de colonnes sont tous corrects mais j'ai eu cette erreur.

Ce code (qui doit être répétée pour des temps de 54x6) - de la requête A. Query B applique une modification similaire seulement .:

Select 
    '2013' "YEAR", 
    Upper(a.text_month) "MONTH", 
    Upper('Budget') "VERSION", 
    case 
    when length(b.level1_name) > 5 then 'Parent' 
    else 'SUBSIDIARIES' 
    end "COMPANY_GROUP", 
    case 
    when length(b.level1_name) < 6 and b.level1_name <> '1000' then 'Subsidiaries' 
    else '1000 Parent' 
    end "COMPANY", 
    case 
    when length(b.level1_name) < 6 and b.level1_name <> '1000' then 'SUBS' 
    else '1000' 
    end "COMPANY_CODE", 
    case 
    when length(b.level1_name) > 5 then 'Parent' 
    else 'SUBSIDIARIES' 
    end "COMPANY_NAME", 
    b.level1_displayname "DIVISION", 
    b.level1_name "DIVISION_CODE", 
    case 
    when length(b.level1_name) > 5 then ltrim(upper(substr(b.level1_displayname, 8))) 
    else upper(ltrim(substr(b.level1_displayname, 10))) 
    end "DIVISION_NAME", 
    upper(a.text_nature_of_trip) "NATURE_OF_TRAVEL", 
    upper(a.text_placeeventstraining) "TRAVEL_DETAILS", 
    upper(a.text_country) "COUNTRY", 
    a.text_name_of_employee "EMPLOYEE_NAME", a.float_no_of_attendees "NO_OF_ATTENDEES",  
    a.text_sponsored "SPONSORED", 
    a.text_remarks "REMARKS", 
    'OTHER TRAVEL EXPENSES' "COST_ELEMENT", 
    a.FLOAT_702120005_OTHER_TRAVEL_E "AMOUNT" 
From PUBLISH_PNL_AAAA_2013.et_travel_transaction a, 
PUBLISH_PNL_AAAA_2013.cy_2elist b 
Where a.elist = b.level3_iid 

Répondre

1

ORA-00904 est "nom de colonne non valide" - soit vous avez incorrectement orthographié le nom de la colonne, soit vous l'avez préfixé avec l'alias de table incorrect, les citations omises d'un littéral de chaîne, ou un nombre quelconque d'autres problèmes.

Vérifiez le point dans le code que le message d'erreur mentionne pour des erreurs de ce type.

+0

L'erreur est-elle importante si j'ai un long script? – JKStack

+1

Si l'erreur ne vous donne pas de numéro de ligne, modifiez le script pour réduire la zone dans laquelle vous recherchez en commentant certaines parties de la clause select, par exemple. –

+0

Ouais, c'était vraiment le problème, un utilisateur a différents noms dessus. Le problème avec Oracle est qu'il ne donne pas où l'erreur est quand vous avez un long script. Merci – JKStack

Questions connexes