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

  1. #1
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    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 sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073

  3. #3
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    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 sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    manque un espace

  5. #5
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    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 émérite 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
    Points : 2 370
    Points
    2 370
    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 ?
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  7. #7
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Attention, dans le cas où l'EXECUTE IMMEDIATE renvoie plus d'une ligne, il faut utiliser le BULK COLLECT
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  8. #8
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut
    Merci pour votre aide

+ 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