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

PL/SQL Oracle Discussion :

Informations relatives à un pays


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Décembre 2009
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 70
    Par défaut Informations relatives à un pays
    Je me retrouve avec une requête PL/SQL que je trouve plus complexe la voici donc , aidez moi.

    La table COUNTRIES est constituée de 3 attributs : country_id, country_name et region_id.
    Ecrivez un bloc PL/SQL permettant d'afficher des informations relatives à un pays donné.
    a. Déclarez un enregistrement PL/SQL en fonction de la structure de la table COUNTRIES.
    b . Utilisez la commande DEFINE pour fournir l'ID du pays. Transmettez cette valeur au bloc PL/SQL via une variable de substitution iSQL*Plus.

    c. Utilisez DBMS_OUTPUT.PUT_LINE pour afficher les informations relatives au pays.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    a/ %TYPE %ROWTYPE
    b/ DEFINE
    c/ dbms_output.put_line

    Propose nous un code et on t'aideras à l'améliorer si nécessaire...

  3. #3
    Membre actif
    Inscrit en
    Décembre 2009
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 70
    Par défaut
    Voici ma requete:
    mais ça marche pas.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    declare
    var_enregistrement COUNTRIES.id_countries%type
    begin
    select * into var_afficher from countries where id_countries=var_enregistrement
    DBMS_OUTPUT.PUT_LINE(var_afficher);
    End;

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    211
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 211
    Par défaut
    Bonjour,

    C'est Quoi ?

    Et Il faut déclarer un Enregistrement de type : plutôt que pour récupérer toute la ligne.

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    SELECT INTO ne correspond pas à ton besoin :
    Cet ordre ne doit ramener qu'une ligne sous peine de générer l'exception NO_DATA_FOUND si aucune ligne n'est ramenée ou TOO_MANY_ROWS si plus d'une ligne sont ramenées
    Tu as besoin d'un curseur.
    Les curseurs for sont plus simples à lire et à écrire mais la question a/ sous-entend plutôt l'utilisation d'un curseur explicite.

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    211
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 211
    Par défaut
    Bonjour,

    Il peut utiliser le puisque le besoin est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ecrivez un bloc PL/SQL permettant d'afficher des informations relatives à un pays donné.

  7. #7
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Par défaut
    Citation Envoyé par bestcasaoui Voir le message
    Je me retrouve avec une requête PL/SQL que je trouve plus complexe la voici donc , aidez moi.

    La table COUNTRIES est constituée de 3 attributs : country_id, country_name et region_id.
    Ecrivez un bloc PL/SQL permettant d'afficher des informations relatives à un pays donné.
    a. Déclarez un enregistrement PL/SQL en fonction de la structure de la table COUNTRIES.
    b . Utilisez la commande DEFINE pour fournir l'ID du pays. Transmettez cette valeur au bloc PL/SQL via une variable de substitution iSQL*Plus.

    c. Utilisez DBMS_OUTPUT.PUT_LINE pour afficher les informations relatives au pays.
    Pourquoi ne pas l'avoir essayé ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
     mhouri >create table countries(country_id number
      2  ,country_name  varchar2(30)
      3  ,region_id  number);
     
    Table created.
     
     mhouri >insert into countries values (1, 'Belgique',100);
     
    1 row created.
     
     mhouri >insert into countries values (2, 'France',200);
     
    1 row created.
     
     mhouri >insert into countries values (3, 'Qatar',300);
     
    1 row created.
     
     mhouri >commit;
     
    Commit complete.
     
     mhouri >CREATE OR REPLACE PROCEDURE p_get_country_info (p_country_id NUMBER)
      2  IS
      3     CURSOR c_get_countries
      4     IS
      5        SELECT country_id, country_name, region_id
      6          FROM countries
      7         WHERE country_id = p_country_id;
      8  
      9     lr_countries   countries%ROWTYPE;
     10  BEGIN
     11     FOR r_get_countries IN c_get_countries
     12     LOOP
     13        dbms_output.put_line ('country_id :' || r_get_countries.country_id);
     14        dbms_output.put_line ('country_name :' || r_get_countries.country_name);
     15        dbms_output.put_line ('country_region_id :' || r_get_countries.region_id);
     16     END LOOP;
     17  END;
     18  /
     
    Procedure created.
     
     mhouri >set serveroutput on
     mhouri >begin
      2  p_get_country_info(1);
      3  end;
      4  /
    country_id :1                                                                   
    country_name :Belgique                                                          
    country_region_id :100                                                          
     
    PL/SQL procedure successfully completed.
     
     mhouri >spool off;
    Mohamed Houri

  8. #8
    Membre actif
    Inscrit en
    Décembre 2009
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 70
    Par défaut
    Citation Envoyé par Mohamed.Houri Voir le message
    Pourquoi ne pas l'avoir essayé ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
     mhouri >create table countries(country_id number
      2  ,country_name  varchar2(30)
      3  ,region_id  number);
     
    Table created.
     
     mhouri >insert into countries values (1, 'Belgique',100);
     
    1 row created.
     
     mhouri >insert into countries values (2, 'France',200);
     
    1 row created.
     
     mhouri >insert into countries values (3, 'Qatar',300);
     
    1 row created.
     
     mhouri >commit;
     
    Commit complete.
     
     mhouri >CREATE OR REPLACE PROCEDURE p_get_country_info (p_country_id NUMBER)
      2  IS
      3     CURSOR c_get_countries
      4     IS
      5        SELECT country_id, country_name, region_id
      6          FROM countries
      7         WHERE country_id = p_country_id;
      8  
      9     lr_countries   countries%ROWTYPE;
     10  BEGIN
     11     FOR r_get_countries IN c_get_countries
     12     LOOP
     13        dbms_output.put_line ('country_id :' || r_get_countries.country_id);
     14        dbms_output.put_line ('country_name :' || r_get_countries.country_name);
     15        dbms_output.put_line ('country_region_id :' || r_get_countries.region_id);
     16     END LOOP;
     17  END;
     18  /
     
    Procedure created.
     
     mhouri >set serveroutput on
     mhouri >begin
      2  p_get_country_info(1);
      3  end;
      4  /
    country_id :1                                                                   
    country_name :Belgique                                                          
    country_region_id :100                                                          
     
    PL/SQL procedure successfully completed.
     
     mhouri >spool off;
    Mohamed Houri
    Bonjour Mohamed,
    Je te remercie beaucoup pour ta reponse , vraiment tu n'es pas comme les autres
    J'ai une question : est ce que je doit obligatoirement passer par les cursseur ? il y a pas un truc avec le select into ?
    Merci beaucoup

  9. #9
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Par défaut
    Citation Envoyé par bestcasaoui Voir le message
    Bonjour Mohamed,
    Je te remercie beaucoup pour ta reponse , vraiment tu n'es pas comme les autres
    J'ai une question : est ce que je doit obligatoirement passer par les cursseur ? il y a pas un truc avec le select into ?
    Merci beaucoup
    Bonjour,

    Le select into produit l'un des trois effets suivants:

    (1) il n'y a aucun enregistrement selectioné et auquel cas c'est l'exception when_no_data_found qui va se déclencher
    (2) il existe plus d'un enregistrement selectioné et auquel cas c'est l'exception when_to_many_rows qui doit se déclencher
    (3) il existe un seul enregistrement et auquel cas aucune erreur n'est produite

    D'une manière générale, lorsque l'on s'attend à un seul enregistrement il faut de préférence alors utiliser le 'select into'. Par contre lorsque l'on s'attend à plusieurs enregistrements il faut alors prévoir un curseur dans ce cas

    Bien cordialement

    Mohamed Houri

Discussions similaires

  1. Servlet qui permet de récupérer des informations relatives à une application
    Par L'aigle de Carthage dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 21/06/2011, 12h19
  2. [WS 2008 R2] Information relative au nom de domaine
    Par Estebann dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 14/03/2011, 10h17
  3. Réponses: 2
    Dernier message: 05/02/2008, 17h41
  4. Réponses: 6
    Dernier message: 18/09/2007, 16h44

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