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 :

Procédure Stockée PL/SQL [11g]


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2013
    Messages : 18
    Points : 11
    Points
    11
    Par défaut Procédure Stockée PL/SQL
    Bonjour,
    Je dois créer une procédure PL/SQL permettant de copier les données de civil.personne vers institut.etudiant.
    Cette procédure prend en paramètre (date_appel, file_name)

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 763
    Points
    30 763
    Par défaut
    Qu'as-tu déjà essayé ?
    Quel problème rencontres-tu ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    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
    Tu veux pas qu'on fasse tes devoirs aussi ?

    A part ça, on connait pas les tables, que vient faire un file_name là-dedans ? Elle sert à quoi la date d'appel ?

    C'est n'importe quoi là, comment veut-tu qu'on t'aide avec si peu d'info ?

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2013
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    En fait j'ai essayé quelques codes. Entre autre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE or replace PROCEDURE copie_infos
    BEGIN
    INSERT INTO etudiant (
        SELECT date_appel, file_name 
        FROM personne);
    END/
    Mais cela ne marche pas parce qu'il s'agit de deux tables differentes

  5. #5
    Membre confirmé
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 339
    Points : 586
    Points
    586
    Par défaut
    Pour tester, toujours exécuter ta requête en dehors de ta procédure stockée.
    Les messages d'erreurs seront mieux remonter par ton client Oracle.

    Ensuite, une recherche Google avec les mots "Oracle select insert" te donne la solution :

    http://docs.oracle.com/cd/E17952_01/...rt-select.html

  6. #6
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2013
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Je ne veux pas que tu fasse mes devoirs, c'est juste que c'est la première fois que j'utilise Oracle donc je suis encore en phase apprentissage.
    Tout ce que je demande c'est comment modifier mon code pour copier les données entre deux tables qui appartiennent a deux bases différentes.

  7. #7
    Membre confirmé
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 339
    Points : 586
    Points
    586
    Par défaut
    Tu as deux problématiques ici.

    1. Apprendre comment copier des données d'une table à une autre. En dehors de la syntaxe, ce n'est pas une spécificité Oracle

    2. Apprendre à faire une procédure stockée.


    Fais le pas à pas

  8. #8
    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
    Faudrait commencer par lire cet excellent tuto : http://sheikyerbouti.developpez.com/pl_sql/

    Ensuite, proposer le code que tu testes après avoir cherché un minimum notamment sur Google ce que les messages d'erreurs signifient et évidemment, nous décrire le problème le cas échéant. "Ca ne marche pas" ne veut rien dire.

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2013
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    j'ai essayé ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    create or replace procedure copie_infos is
    begin
         insert into institut.etudiant (id, file_name, date_appel)
            select msisdn, file_name, timestamp
            from civil.personne;
         commit;
    end;

    Aucun message d'erreur ne s'affiche quand j’exécute ce code.
    Le problème est que quand je tape F5 aucune ligne ne s'ajoute a la table etudiant.
    Que dois-je faire????

  10. #10
    Membre confirmé
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 339
    Points : 586
    Points
    586
    Par défaut
    Encore une fois, exécute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     INSERT INTO institut.etudiant (id, file_name, date_appel)
            SELECT msisdn, file_name, timestamp
            FROM civil.personne;
    En dehors de la procédure stockée, et regarde ce qu'il se passe.

  11. #11
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2013
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    J'ai bien suivi tes instructions, Isythiel, et j'ai essayé quelques petites choses. Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    insert into exemple (id, file_name, date_appel) 
    select identifiant, mail, naissance 
    from premier;
    => deux tables de la même base: ça marche

    Par contre, quand j'essaye:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    create or replace procedure copie_infos is 
    begin 
    insert into exemple (id, file_name, date_appel) 
    select identifiant, mail, naissance 
    from premier; 
    end;
    => deux tables de la même base: ça ne marche pas

    et là non plus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO institut.etudiant (id, file_name, date_appel) 
    SELECT login, file_name, timestamp 
    FROM civil.personne;
    => deux tables dans deux bases différentes: ça ne marche pas

    je n'arrive toujours pas a mettre la main sur l'erreur

  12. #12
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 763
    Points
    30 763
    Par défaut
    Citation Envoyé par ines_eleuch Voir le message
    ça ne marche pas
    Qu'est-ce que ça signifie ? Tu as un message d'erreur ? Aucune action ?
    As-tu vérifié que ton SELECT retourne bien des lignes à ajouter ?
    La procédure que tu crées, as-tu demandé son exécution ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  13. #13
    Membre confirmé
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 339
    Points : 586
    Points
    586
    Par défaut
    Comment exécute-tu ta procédure ?

  14. #14
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2013
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Quand je dis "ça ne marche" je veux dire qu'il s’exécute normalement sans aucun message d'erreur. mais quand j'actualise la table, elle reste vide.
    et concernant le "select" je suppose qu'il retourne les lignes puisque quand te tape le code ci-dessous la table est remplie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO exemple (id, file_name, date_appel) 
    SELECT identifiant, mail, naissance 
    FROM premier;
    Isythiel, j'execute la procedure en tapant shift-F9 (j'utilise TOAD FOR ORACLE)

  15. #15
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut
    [On part de loin là ]
    shift-F9 ==> Va simplement compiler votre procédure

    Une fois compilée : Lancer la commande

    Signé : Capitaine Jean-Luc Picard

  16. #16
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 763
    Points
    30 763
    Par défaut
    Et avec un COMMIT ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  17. #17
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2013
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Grâce à vous tous, je sens que je suis sur la bonne voie.
    J'ai tapé ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    create or replace procedure copie_infos is
    begin
         insert into exemple (id, file_name, date_appel)
            select identifiant, mail, naissance
            from premier;
         commit;
    end;
    Puis:
    Quand je rafraîchis la table exemple, les données s'ajoutent.

    par contre, quand il s'agit de deux tables dans deux bases différentes (après avoir vidé la table bien sûr) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    create or replace procedure copie_infos is
    begin
         INSERT INTO institut.etudiant (id, file_name, date_appel) 
                 SELECT login, file_name, timestamp 
                 FROM civil.personne;
         commit;
    end;
    OK, tout va bien
    mais quand j’exécute:
    Un message d'erreur s'affiche:

    ORA-00001: violation de contrainte unique (INSTITUT.SYS_C0046903)
    ORA-06512: à "INSTITUT.COPIE_INFOS", ligne 3
    ORA-06512: à ligne 1

  18. #18
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 763
    Points
    30 763
    Par défaut
    D'après ton message d'erreur on peut dire qu'il existe une contrainte nommée INSTITUT.SYS_C0046903 sur ta table institut.etudiant qui vérifie l'unicité d'un identifiant (technique ou fonctionnel).
    Ce qui signifie que :
    1. Tu essayes d'ajouter dans ta table cible des lignes qui y existent déjà
    2. Ta table source contient des doublons sur cet identifiant
    3. Une opération de mise à jour (UPDATE ou MERGE) serait plus adaptée à ton besoin

    Note : ces trois assertions ne sont pas exclusives.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  19. #19
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2013
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Je ne sais pas pourquoi mais quand j'execute cette procedure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    create or replace procedure copie_infos is
    begin
        insert into exemple (id, file_name, date_appel)
            select identifiant, mail, naissance
            from civil.personne;
            where identifiant= '00025416';
        commit;
    end;
    execute copie_infos
    les lignes s'ajoutent dans la table.
    Mais quand j'execute cette procedure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    create or replace procedure copie_infos is
    begin
        insert into exemple (id, file_name, date_appel)
            select identifiant, mail, naissance
            from civil.personne;
        commit;
    end;
    execute copie_infos
    Ce message d'erreur s'affiche

    ORA-00001: violation de contrainte unique (INSTITUT.EXEMPLE_PK)
    ORA-06512: à "INSTITUT.COPIE_INFOS", ligne 3
    ORA-06512: à ligne 1

    Je ne peux pas remplir la table ligne par ligne quand même.
    Avez vous des solutions a me proposer s'il vous plais

  20. #20
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 27
    Points : 51
    Points
    51
    Par défaut
    Détection des doublons dans la table source (en supposant que la PK de la table cible est sur le champ "id")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select identifiant,count(*) from civil.personne group by identifiant having count(*)>1;
    Si la requête donne un résultat il faut soit supprimer les doublons de le source soit supprimer la PK sur la table cible.
    Mais déjà est-ce que tu comprend la notion de doublons et de PK?

    Si la requête ne retourne rien alors c'est que tu as déjà chargé des données, tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE OR REPLACE procedure copie_infos IS
    begin
        EXECUTE IMMEDIATE 'TRUNCATE TABLE exemple';
        INSERT INTO exemple (id, file_name, date_appel)
            SELECT identifiant, mail, naissance
            FROM civil.personne;
        commit;
    end;
    execute copie_infos
    Attention la commande EXECUTE IMMEDIATE 'TRUNCATE TABLE exemple'; va supprimer tout le contenu de ta table exemple.

    Bon évidement je pars du principe que tu fait juste des tests de copie puisque tu vide ta table, si il y a un besoin fonctionnel derrière, il ne faut pas faire ça.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [PowerBuilder 10] Procédure stockée sous SQL Server 2000
    Par digital prophecy dans le forum Powerbuilder
    Réponses: 8
    Dernier message: 11/10/2006, 11h38
  2. Procédures stockées vs SQL direct
    Par odelayen dans le forum Access
    Réponses: 2
    Dernier message: 25/07/2006, 11h09
  3. Procédure stockée, transact SQL et param de type INT
    Par Samish dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/04/2006, 11h01
  4. Réponses: 2
    Dernier message: 05/12/2005, 17h39
  5. Procédures stockées imbriquées SQL Server
    Par Mike69 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/10/2003, 11h31

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