IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

Accéder à une table dont le nom est dans une table


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Par défaut ORACLE: accéder à une table dont le nom est dans une table
    Bonjour,

    J'ai une dizaine de tables d'erreurs dans ma base de données oracle.
    Je voudrais chaque matin recevoir un mail qui liste toutes les données en erreur de la nuit.

    Pour cela j'ai créé une procédure stockée qui va rechercher dans chaque tables les données en erreur.
    J'ai donc tout d'abord fait un curseur comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     FOR C IN (SELECT TABLE_NAME
               FROM ALL_TABLES
               WHERE TABLE_NAME like ERR_%')
     LOOP
       INSTRUCTION
      END LOOP;
    Grâce à cette boucle j'obtiens la liste de mes tables d'erreur.
    Ensuite je voudrais table par table lister les lignes en erreur.
    Mais comment faire?
    du sql dynamique?
    Mais comment afficher mon résultat si je fais comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    le_sql:='SELECT * FROM :1 WHERE FLAG='ERR''
    EXECUTE IMMEDIATE le_sql using c.table_name
    Mais cela me semble bizarre et je ne vois pas ensuite comment récupérer les données de ma requête.
    Quelqu'un pourrait il m'aider?Merci

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Par défaut
    J'ai fait comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    le_sql:='SELECT DISTINCT DATE_PROCESS, NB_PROCESS FROM '||V_TABLE||'WHERE PROCESS_FLAG=''ERR''';
      EXECUTE IMMEDIATE le_sql RETURN INTO V_DATE, V_PROC_NUMBER;
    Mais cela ne fonctionne pas.
    Quand j'execute ma procédure j'ai l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    ORA-00933: SQL command not properly ended
    ORA-06512: at "ALERTE_S", line 25
    ORA-06512: at line 2

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    'WHERE ' WHERE

    manque un espace

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Par défaut
    Ah oui je suis un pe tête en l'air avec les fêtes :-)

    J'ai donc ajouter l'espace mais j'ai une nouvelle erreur qui me dit que je ne peux utiliser un return into qu'avec INSERT DELETE UPDATE.
    Est ce exact?
    ou y a t'il un probème avec ma syntaxe?

  6. #6
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut
    Le lien de Fred me semble assez clair pourtant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DECLARE
      Emp_id            emp.emp_id%TYPE := 1214 ;
      Emp_name          emp.name_id%TYPE ;
      Emp_rec           emp%ROWTYPE ;
      LC$Requete        VARCHAR2(256) ;
    BEGIN
      LC$Requete:= ‘SELECT emp_name from EMP WHERE empno = :1’;
      EXECUTE IMMEDIATE LC$Requete INTO Emp_name USING Emp_id ;
     
      LC$Requete:= ‘SELECT * from EMP WHERE empno = :1’;
      EXECUTE IMMEDIATE LC$Requete INTO Emp_rec USING Emp_id ;
    END ;
    Pourquoi utiliser un RETURN INTO au lieu du INTO simple ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/04/2008, 17h41
  2. Requete SQL sur une table dont le nom est dans une autre table
    Par orangepresse dans le forum Langage SQL
    Réponses: 3
    Dernier message: 29/09/2007, 13h32
  3. Réponses: 3
    Dernier message: 05/02/2007, 09h41
  4. Réponses: 3
    Dernier message: 05/10/2006, 18h52
  5. Appel de methode dont le nom est dans une variable
    Par osopardo dans le forum Langage
    Réponses: 1
    Dernier message: 24/11/2005, 20h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo