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

SQL Oracle Discussion :

[PL/SQL]probleme affectation de variable dans une requete


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 70
    Points : 42
    Points
    42
    Par défaut [PL/SQL]probleme affectation de variable dans une requete
    Bonjour,

    J'ai un petit probleme dans une procedure PL/SQL qui est appeler depuis un script php.

    Voila la procedure :

    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
    procedure recup_medecin(
        operation IN char,
        acte IN char, 
        num OUT NOCOPY char, 
        nom OUT NOCOPY char, 
        prenom OUT NOCOPY char, 
        ville OUT NOCOPY char, 
        rue OUT NOCOPY char, 
        cp OUT NOCOPY char)
      is
      begin
        select deref(ref_medecin).num_m, 
        deref(ref_medecin).nom_m, 
        deref(ref_medecin).prenom_m,
        deref(ref_medecin).adresse_m.ville, 
        deref(ref_medecin).adresse_m.rue, 
        deref(ref_medecin).adresse_m.cp
          into num, nom, prenom, ville, rue, cp
          from the(select listeactes from operation where num_op=operation)
          where num_acte=acte;
      end;
    Mon probleme c'est que dans le script php rien ne s'affiche! Ca vient de la variable acte qui doit contenir quelque chose comme "A01". Quand je met manuellement la chaine 'A01' tout s'affiche correctement, alors quand quand je le remplace par la variable plus rien.

    Je me demandait si c'était dû au fait que dans la variable il n'y a pas les '...'. Mais dans ce cas comment ajouter une quote à une variable?

    Voila je suis bloquer a cause de ce truc tout bete lol merci pour votre aide!

    ps : Je travail sous oracle 10g XE et windows XP

  2. #2
    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
    Non tu n'es pas obligé d'ajouter des côtes à une variable :
    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
    SQL> select * from t3;
    A
    ------------------------------
    a
    b
     
    SQL> declare
      2    v varchar2(30);
      3    w varchar2(30) := 'b';
      4  begin
      5    select a into v from t3 where a = w;
      6    dbms_output.put_line (w);
      7  end;
      8  /
    b
     
    PL/SQL procedure successfully completed.
    Ton problème vient peut-être de comment t'appelle ta procédure. As-tu essayer de l'exécuter sous SQL*Plus ?

  3. #3
    Membre du Club
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 70
    Points : 42
    Points
    42
    Par défaut
    J'ai appeler ma procedure depuis sqldeveloper comme ceci :

    execute pack_operation.recup_medecin('1','A01');

    (je sais pas si on a besoin de mettre les parametre en sortie??)

    Et il me met l'erreur suivante :

    Error starting at line 1 in command:
    execute pack_operation.recup_medecin('1','A01');
    Error report:
    ORA-06550: Ligne 1, colonne 7 :
    PLS-00306: numéro ou types d'arguments erronés dans appel à 'RECUP_MEDECIN'
    ORA-06550: Ligne 1, colonne 7 :
    PL/SQL: Statement ignored
    06550. 00000 - "line %s, column %s:\n%s"
    *Cause: Usually a PL/SQL compilation error.
    *Action:

    Et voila le code php qui appel la procédure :

    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
    <?php
    		$conn = oci_connect("hopital","hopital","//localhost/XE");
    		if(!$conn){
    			$e = oci_error();
    			print'erreur! : '.htmlentities($e['message']);
    			exit;
    		}
    		else{
    			if(isset($_GET['operation'])) $num_op = $_GET['operation'];
    			else $num_op = "";
    			if(isset($_GET['acte'])) $num_acte = $_GET['acte'];
    			else $num_acte = "";
    			$stmt = oci_parse($conn, "call pack_operation.recup_medecin(:operation, :acte, :num, :nom, :prenom, :ville, :rue, :cp)");
    			oci_bind_by_name($stmt,":operation",$num_op,4);
    			oci_bind_by_name($stmt,":acte",$num_op,4);
    			oci_bind_by_name($stmt,":num",$num,4);
    			oci_bind_by_name($stmt,":nom",$nom,4);
    			oci_bind_by_name($stmt,":prenom",$prenom,4);
    			oci_bind_by_name($stmt,":ville",$ville,4);
    			oci_bind_by_name($stmt,":rue",$rue,10);
    			oci_bind_by_name($stmt,":cp",$cp,4);
    			oci_execute($stmt);
    			oci_close($conn);
    			echo 'num : '.$num.'<br />';
    			echo 'nom : '.$nom.'<br />';
    			echo 'prenom : '.$prenom.'<br />';
    			echo 'adresse : <br />';
    			echo '	'.$rue.'<br />';
    			echo '	'.$cp.' '.$ville;
    		}
    		echo '<center><a href="http://127.0.0.1/Hopital/listeactes.php?numero='.$num_op.'">Retour aux actes</a></center>';
    	?>

  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
    Citation Envoyé par <% Bastien %>
    je sais pas si on a besoin de mettre les parametre en sortie??
    Oui, essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    declare
      v_num char(100);
      v_nom char(100);
      v_prenom char(100);
      v_ville char(100);
      v_rue char(100);
      v_cp char(100);
    begin
      recup_medecin('1','A01', v_num, v_nom, v_prenom, v_ville, v_rue, v_cp);
      dbms_output.put_line (v_num || '  ' || v_nom || '  ' || v_prenom || '  ' ||
                            v_ville || '  ' || v_rue || '  ' || v_cp);
    end;
    /

  5. #5
    Membre du Club
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 70
    Points : 42
    Points
    42
    Par défaut
    Ouai la il m'affiche Bien les données. Mais il me les affiche aussi dans le script php quand je fait num_acte='A01'; au lieu de num_acte=acte; donc bon je sais pas trop d'ou ca vient

  6. #6
    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
    Désolé je n'y connais rien en php, mais peut-être ce post pourra-t-il t'aider :
    http://www.developpez.net/forums/sho...&highlight=php

  7. #7
    Membre du Club
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 70
    Points : 42
    Points
    42
    Par défaut
    nan ca ne m'a pas aider, le probleme sur le topic que tu m'a montrer c'est que le mec avait fait une erreur de syntaxe dans les variables alors que moi je n'ai pas fait cette erreur.

  8. #8
    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
    Oui mais j'ai vu qu'il n'exécutait pas sa procédure PL comme toi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $stmt = oci_parse($conn, "BEGIN pack_operation.recup_medecin(:operation, :acte, :num, :nom, :prenom, :ville, :rue, :cp); END;");

  9. #9
    Membre du Club
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 70
    Points : 42
    Points
    42
    Par défaut
    Bon ca yeh j'ai trouver l'erreur....

    J'ai honte

    En fait c'est la faute au copier coller grrrrrrrrrr

    oci_bind_by_name($stmt,":operation",$num_op,-1);
    oci_bind_by_name($stmt,":acte",$num_op,-1);

    J'ai assigner la variable oracle :acte a la variable php $num_op qui contient le numero d'operation donc forcement ca marche pas et ce con de php ne me dis rien forcement! lol

    Bloquer une journée pour ca .. faut le faire quand même!!

  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
    Errare humanum est sed persevare diabolicum

    Bah tu vois que tu t'étais bien gourré dans tes variables

Discussions similaires

  1. [MySQL] probleme de syntaxe variable dans une requete sql
    Par nico le noob dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 03/09/2010, 13h20
  2. [ANT] affectation de variables dans une boucle
    Par dino_xrc dans le forum ANT
    Réponses: 6
    Dernier message: 17/12/2007, 19h47
  3. BO 5.1 Champ variable dans une requete SQL
    Par Sergio63 dans le forum Deski
    Réponses: 1
    Dernier message: 21/05/2007, 11h45
  4. utilisation d'une variable dans une requete SQL
    Par ezneti dans le forum Visual C++
    Réponses: 1
    Dernier message: 30/04/2007, 09h47
  5. [SQL] calcul de plusieurs variables dans une table
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 12/03/2006, 21h53

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