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 :

[Oracle 9.2.0.4.0 SLES 9] passer en paramètre une Variable


Sujet :

Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 5
    Points : 4
    Points
    4
    Par défaut [Oracle 9.2.0.4.0 SLES 9] passer en paramètre une Variable
    Objet PLSQL Ref Oracle PL/SQL page 15
    Systeme Oracle 9.2.0.4.0 SLES 9


    Bonsoir,
    je souhaite passer le nom de la table en parametre, j'y arrive pour les champs mais pas pour la variable aprés la directive FROM.

    Exemple
    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
     
    CREATE OR REPLACE  PROCEDURE P_COMPTE (v_serveur
        varchar2) IS
     
      CURSOR c1 IS
     
    SELECT ARBO, TAILLE FROM v_serveur ;
    BEGIN
      htp.print('<TABLE BORDER="1" WIDTH="100%">');
      FOR rec IN c1 LOOP
     htp.print('<TR><TD>' || rec.ARBO || '</TD><TD>' || rec.TAILLE || '</TD><TD></TR>');
     htp.print('<TR><TD>' || p_v_serveur ||'</TD></TR>');
      END LOOP;
      htp.print('</TABLE>');
    END P_COMPTE;
    Merci pour votre aide
    Cordialement

  2. #2
    Membre éclairé Avatar de plabrevo
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 547
    Points : 670
    Points
    670
    Par défaut
    Je pense que ce n'est pas le nom de la table qu'il faut passer en parametre, mais une valeur qui correspond au nom du serveur.

    Par example remplacer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ARBO, TAILLE FROM v_serveur ;
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ARBO, TAILLE FROM <table qui stocke les noms de serveurs> WHERE serveur = v_serveur ;
    Et remplacer p_v_serveur par v_serveur dans la boucle.

  3. #3
    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
    NON, on ne peut pas mettre un nom de table en variable dans un curseur ou select.
    Il faut passer par du sql dynamique (EXECUTE IMMEDIATE).

  4. #4
    Candidat au Club
    Inscrit en
    Janvier 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Variables
    Ok Merci pour cette réponse, effectivement je ne trouvais rien sur les FAQ
    Je me documente sur la doc de M. Sheik Yerbouti page 218 et je code

    Cordialement

  5. #5
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DECLARE
      cur sys_refcursor ;
      req VARCHAR2(1000) ;
      dept_rec DEPT%ROWTYPE ;
    BEGIN
      req := 'Select * From ' || 'DEPT' ;
      OPEN cur FOR req ;
         FETCH cur INTO dept_rec ;
      CLOSE cur ;
    END;

  6. #6
    Membre du Club Avatar de bambou
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2004
    Messages : 192
    Points : 69
    Points
    69
    Par défaut
    bonjour,
    je me permets de flooder dans ce poste parce que j'ai réutilisé le code de SheikYerbouti, mais j'ai un petit souci...pas trés grave, c'est juste mon deuxième trigger et je maitrise pa trop bien la chose encore

    donc en suivant le code ci-dessus, j'ai fait un petit trigger de test :

    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
    CREATE OR REPLACE TRIGGER insertLesLogements
    BEFORE INSERT ON LesLogements
    FOR EACH ROW
    DECLARE 
    nomBat VARCHAR(20) := :NEW.nomBat;
    nbBat INTEGER := 0;
    nombreBat sys_refcursor;
    req VARCHAR2(1000) ;
    BEGIN
      /** ouverture du tampon */
      DBMS_OUTPUT.ENABLE( 1000000 ) ;
      /** récupération de la forme de l'épreuve */
      req := 'SELECT COUNT(nomBat) FROM LesBatiments WHERE nomBat='||nomBat;
      DBMS_OUTPUT.PUT_LINE(req);
      OPEN nombreBat FOR req;
      FETCH nombreBat INTO nbBat;
      CLOSE nombreBat;
      DBMS_OUTPUT.PUT_LINE('nombre de batiments : ' || nbBat);
      /**IF nbBat <> 1 THEN
          RAISE_APPLICATION_ERROR(-20000,'Leslogements;01');
          ROLLBACK;
      END IF; */
    END;
    /
    en testant cette commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO LesLogements values(8, 'Gaughin', 5);
    le systeme me renvoi l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ERROR at line 1:
    ORA-00904: "GAUGHIN": invalid identifier
    ORA-06512: at "BONNEFYA.INSERTLESLOGEMENTS", line 12
    ORA-04088: error during execution of trigger 'BONNEFYA.INSERTLESLOGEMENTS'
    je pense que l'erreur vient du fait qu'il ni a plus de ' ' autour de mon nom de batiment alors que le systeme s'attend à une chaine

    comment puis-je rajouter ces ' ' ?

  7. #7
    Membre du Club Avatar de bambou
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2004
    Messages : 192
    Points : 69
    Points
    69
    Par défaut
    ok, j'ai trouvé la réponse sur un autre post :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ...
    DECLARE 
    nomBat VARCHAR(20) := :NEW.nomBat;
    ...
    BEGIN
      ...
      req := 'SELECT COUNT(nomBat) FROM LesBatiments WHERE nomBat=:1';
      OPEN nombreBat FOR req USING nomBat;
      ...
    END;

Discussions similaires

  1. Réponses: 15
    Dernier message: 18/11/2008, 17h41
  2. Réponses: 1
    Dernier message: 16/03/2007, 11h46
  3. Passer un objet à une procédure ORACLE
    Par grosFab dans le forum Oracle
    Réponses: 4
    Dernier message: 28/08/2006, 19h58
  4. [Oracle 8i] Type d'une variable
    Par GoLDoZ dans le forum Oracle
    Réponses: 10
    Dernier message: 27/06/2006, 17h07
  5. Récupérer un résultat oracle dans une variable
    Par claralavraie dans le forum Linux
    Réponses: 4
    Dernier message: 09/01/2006, 16h59

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