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

Administration Oracle Discussion :

nombre de lignes d'une liste de tables


Sujet :

Administration Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 7
    Points
    7
    Par défaut nombre de lignes d'une liste de tables
    Bonjour
    Dans ma base Oracle j'ai une table contenant une liste de table
    Je souhaiterai pouvoir connaitre le nombre de lignes que contiennent chacune de ces tables.
    Je pensais notamment créer un curseur dans lequel je recupere le nom des tables puis ensuite faire un EXECUTE pour connaitre le nombre de ligne de la table contenu dans le curseur, mais je sais pas du tout comment on fait.
    la table contenant la liste des table s'appelle REF_TABLE et contient la colonne TABLE_NAME qui contient le nom des tables.
    Je veux mettre le resultat dans une autre table nommé GRS_TABLE contient la colonne TABLE_NAME pour le nom de la table et NB_LIGNE pour le nombre de ligne.
    je pensais faire un truc du style(je sais que c'est completement faux mais c'est pour donner une idée) :

    DECLARE
    NB_LIGNE INTEGER;

    BEGIN
    for MTABLE in
    (select NOM_TABLE
    From REF_TABLE)
    LOOP
    NB_LIGNE = EXECUTE ("select count(*) from " || MTABLE.NOM_TABLE );
    EXECUTE("INSERT INTO GRS_TABLE VALUES(" || MTABLE.NOM_TABLE || "," || NB_LIGNE ||")") ;
    END LOOP;
    END;

    Merci de votre aide

  2. #2
    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
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Merci mais y aurait-il moyen d'avoir le code car je debute en SQL et la je vois toujours pas comment faire.

  4. #4
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Je pense qu'en faisant un petit effort de lecture et de compréhension du tutoriel tu devrais t'en sortir. Si ce n'est pas le cas, postes-nous ce que tu as fait et ce qui te pose problème.

    Cela te sera beaucoup plus profitable et tu retiendras beaucoup mieux que si l'on te donne une solution toute faite.
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  5. #5
    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
    Citation Envoyé par plaineR
    Cela te sera beaucoup plus profitable et tu retiendras beaucoup mieux que si l'on te donne une solution toute faite.
    Exact
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    alors voila ou j'en suis :

    pour la creation de la fonction :

    CREATE or REPLACE FUNCTION Compte_rec (PC$Table IN VARCHAR2)
    RETURN PLS_INTEGER
    IS
    LC$Requete VARCHAR2(512) ;
    LN$Total PLS_INTEGER ;
    BEGIN
    LC$Requete := ‘Select count(*) From ‘ || PC$Table ;
    EXECUTE IMMEDIATE LC$Requete INTO LN$Total ;
    return LN$Total ;
    END ;


    Pour l'insertion proprement dite

    DECLARE
    LN$Nombre INTEGER;
    LC$Requete2 VARCHAR2(512) ;
    BEGIN
    for MTABLE in
    (select DESTINATION
    From GRS_AUTOSYS_REF_TABLE)
    LOOP
    LN$Nombre := Compte_rec(MTABLE.DESTINATION) ;
    LC$Requete2 := ‘INSERT INTO GRS_AUTOSYS_TABLE VALUES(‘ || MTABLE.DESTINATION || ‘,‘ || LN$Nombre ‘)‘ ;
    EXECUTE IMMEDIATE LC$Requete2
    END LOOP;
    END;

    moi ca ne marche toujours pas. Apparement il y a une erreur deja sur la compilation de la fonction. J'utilise TOAD comme interface pour oracle 9.2

  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
    Tu peux utiliser la balise CODE pour ton code stp ? (c'est le #)

    C'est normal que tu mettes des ` et pas des ' pour tes chaines de caractère ?
    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
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    c'est bon pour la fonction c'etait effectivement les ' qui marchaient pas.
    Mais le reste ne marche toujours pas

  9. #9
    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
    Ensuite pour débugguer le EXECUTE IMMEDIATE (erreur très très fréquente) : Attention aux chaines de caractère.
    Fais un DBMS_OUTPUT pour voir le sql que le execute va faire (sous toad penser à activer le output on) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    DECLARE
    	LN$Nombre INTEGER;
    	LC$Requete2 VARCHAR2(512) ;
    BEGIN
    FOR MTABLE IN
    (SELECT DESTINATION
    FROM GRS_AUTOSYS_REF_TABLE)
    LOOP
    	LN$Nombre := Compte_rec(MTABLE.DESTINATION) ;
    	LC$Requete2 := 'INSERT INTO GRS_AUTOSYS_TABLE VALUES(' || MTABLE.DESTINATION || ',' || LN$Nombre ')' ;
    	DBMS_OUTPUT.PUT_LINE(LC$Requete2);
    	EXECUTE IMMEDIATE LC$Requete2
    END LOOP;
    END;
    T'y es presque
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  10. #10
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Tu peux remplacer le bloc PL par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    insert  INTO GRS_AUTOSYS_TABLE 
    select DESTINATION, Compte_rec(DESTINATION) 
    from GRS_AUTOSYS_REF_TABLE;
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  11. #11
    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
    Dans ton code, l'ordre sql sera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO GRS_AUTOSYS_TABLE VALUES(NOM_TABLE,15)
    faut juste rajouter des ' devant ert derrière le nom de la table

    et conseil : toujours nommer les colonnes dans l'INSERT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO MATABLE(col1, col2) values (val1, val2)
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  12. #12
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    ca avance , ca avance :-)
    apres quelques corrections:

    DECLARE
    LN$Nombre INTEGER;
    LC$Requete2 VARCHAR2(512) ;
    BEGIN
    for MTABLE in
    (select DESTINATION
    From GRS_AUTOSYS_REF_TABLE)
    LOOP
    LN$Nombre := Compte_rec(MTABLE.DESTINATION) ;
    DBMS_OUTPUT.PUT_LINE(LN$Nombre);
    LC$Requete2 := 'INSERT INTO GRS_AUTOSYS_TABLE VALUES(' || MTABLE.DESTINATION || ',' || LN$Nombre || ')' ;
    DBMS_OUTPUT.PUT_LINE(LC$Requete2);
    EXECUTE IMMEDIATE LC$Requete2;
    END LOOP;
    END;

    en DBMS_OUTPUT j'ai bien :
    504935
    INSERT INTO GRS_AUTOSYS_TABLE VALUES(PS_JOB,504935)

    ce qui est bon car pour le moment j'ai qu'une seule table dans ma liste

    mais j'ai l'erreur:
    ORA-00947: not enough values
    ORA-06512: at line 13

    faut que je verifie la syntaxe du INSERT ?

  13. #13
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Ta table GRS_AUTOSYS_TABLE doit comporter plus de 2 colonnes. Mets dans le insert celles que tu veux renseigner.
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  14. #14
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    c'est fait :
    LC$Requete2 := 'INSERT INTO GRS_AUTOSYS_TABLE (NAME_TABLE,LINE_INSERTED) VALUES(' || MTABLE.DESTINATION || ',' || LN$Nombre || ')' ;

    en output
    INSERT INTO GRS_AUTOSYS_TABLE (NAME_TABLE,LINE_INSERTED) VALUES(PS_JOB,504935)

    Mais le soucis c'est que ce qui est contenu dans MTABLE.DESTINATION (PS_JOB) devrait etre entre quote mais il est contenu dans une variable donc la je sais pas trop comment faire...

  15. #15
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Il faut doubler les côtes (comme te l'a dit McM) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LC$Requete2 := 'INSERT INTO GRS_AUTOSYS_TABLE (NAME_TABLE,LINE_INSERTED) VALUES(''' || MTABLE.DESTINATION || ''',' || LN$Nombre || ')' ;
    Mais encore une fois je ne comprends pas pourquoi tu fais cette partie en SQL dynamique alors que la solution que je t'ai proposée plus haut est plus simple et plus performante.
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  16. #16
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    oups j'avais pas vu l'autre solution.
    voila ce que ca donne :

    INSERT INTO GRS_AUTOSYS_TABLE (NAME_TABLE,LINE_INSERTED)
    SELECT DESTINATION, Compte_rec(DESTINATION)
    FROM GRS_AUTOSYS_REF_TABLE

    et j'ai l'erreur
    ORA-00903: invalid table name
    ORA-06512: at "GRSMANAG.COMPTE_REC", line 8

    EDIT: j'ai la meme erreur en utilisant le code PL

    EDIT2 : c'est bon ca marche en fait y'avait des valeurs à NULL dans DESTINATION ce qui devait faire un peu planter la fonction Compte_rec donc avec l'ajout d'une petite clause Where tout est rentré dans l'ordre :-)

    Merci beaucoup pour votre aide

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

Discussions similaires

  1. [XL-2007] Nombre de lignes dans une liste déroulante
    Par divan dans le forum Conception
    Réponses: 3
    Dernier message: 20/11/2010, 10h32
  2. Réponses: 7
    Dernier message: 28/02/2006, 16h46
  3. nombre de lignes d'une table de ma BD
    Par manikou dans le forum MFC
    Réponses: 4
    Dernier message: 06/07/2005, 10h04
  4. Réponses: 8
    Dernier message: 20/06/2005, 15h10
  5. determination le nombre de ligne d'une table
    Par picoti2 dans le forum Bases de données
    Réponses: 2
    Dernier message: 18/03/2004, 09h25

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