Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & Oracle
PHP & Oracle Forum d'entraide sur Oracle avec PHP. Avant de poster -> FAQ Oracle et Cours Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/04/2007, 16h44   #1
Candidat au titre de Membre du Club
 
Développeur informatique
Inscription : février 2007
Messages : 62
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2007
Messages : 62
Points : 11
Points : 11
Par défaut Problème de variable

Voila j'ai créer un package que j'appel depuis un script php. Tout marche parfaitement bien excepté un petit detail que je n'arrive pas à résoudre ni à comprendre.

En effet un de mes script doit afficher les donnée d'un patient dont la rue, sauf que cette rue ne s'affiche pas en entier seul les 12 premier caractères s'affichent.

Voila la procedure du package qui doit afficher les infos sur le patient :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 procedure recup_patient(
    operation IN char, 
    num OUT NOCOPY char, 
    nom OUT NOCOPY char, 
    prenom OUT NOCOPY char, 
    ville OUT NOCOPY char, 
    rue OUT NOCOPY ob_patient.ADRESSE_P.rue%type,--voila la variable parametre rue concerné 
    cp OUT NOCOPY char, 
    tel OUT NOCOPY char)
  is
  begin
    select deref(refpat).num_p, 
    deref(refpat).nom_p, 
    deref(refpat).prenom_p,
    deref(refpat).adresse_p.ville, 
    deref(refpat).adresse_p.rue, 
    deref(refpat).adresse_p.cp, 
    deref(refpat).tel_p
      into num, nom, prenom, ville, rue, cp, tel
      from operation
      where num_op=operation;
  end;
J'ai essayer de donné le type char directement, de récupéré la donnée rue dans une variable intermédiaire mais rien a faire la variable n'accepte que 12 caractère alors qu'elle devrait en accepter 30.

Je vais mettre le code php qui appel la procedure au cas ou, qui c'est ca vient peu etre de la :

Code :
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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Informations sur le patient ayant subit lopération</title>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
	   <link href="tableau.css" rel="stylesheet" type="text/css">
   </head>
   <body>
   <H1>Information sur le patient</H1>
	<?php
		$conn = oci_connect("hopital","hopital","//localhost/XE");
		if(!$conn){
			$e = oci_error();
			print'erreur! : '.htmlentities($e['message']);
			exit;
		}
		else{
			if(isset($_GET['numero'])) $num_op = $_GET['numero'];
			else $num_op = "";
			$stmt = oci_parse($conn, "call pack_operation.recup_patient(:ope, :num, :nom, :prenom, :ville, :rue, :cp, :tel)");
			oci_bind_by_name($stmt,":ope",$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,4);
			oci_bind_by_name($stmt,":cp",$cp,4);
			oci_bind_by_name($stmt,":tel",$tel,4);
			oci_execute($stmt);
			oci_close($conn);
			echo 'num : '.$num.'<br />';
			echo 'nom : '.$nom.'<br />';
			echo 'prenom : '.$prenom.'<br />';
			echo 'telephone : '.$tel.'<br />';
			echo 'adresse : <br />';
			echo '	'.$rue.'<br />';
			echo '	'.$cp.' '.$ville;
		}
	?>
	<center><a href="http://127.0.0.1/Hopital/">Retour à l'accueil</a></center>
   </body>
</html>
Une question qui me trotte dans la tête également :
A quoi sert le 4ème parametre de la fonction oci_bind_by_name?

Voila si quelqu'un sait d'où viens le probleme...

je travail avec Oracle 10g Express Edition, Windows XP, et php5.
<% Bastien %> est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 10h37   #2
Membre habitué
 
Avatar de Aliosha
 
Aliosha
Inscription : mars 2007
Messages : 124
Détails du profil
Informations personnelles :
Nom : Aliosha
Âge : 25
Localisation : France

Informations forums :
Inscription : mars 2007
Messages : 124
Points : 128
Points : 128
Question toute bête : tu as essayé avec un autre nom de rue ?
(Je dis ça parce que j'avais lu quelque part que dans certains langages un caractère avec accent comptait pour deux caractères normaux)

Et heu, sinon, une remarque de forme : beaucoup de noms de rue ont plus de trente caractères. :p
__________________
« Le vécu-plat excite le chaos-rêve. » Traité de l'inactivité, Dimitri Grouchkch.
Aliosha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 10h48   #3
Candidat au titre de Membre du Club
 
Développeur informatique
Inscription : février 2007
Messages : 62
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2007
Messages : 62
Points : 11
Points : 11
ouai j'ai essayer de changer le nom mais rien n'y fait, d'ailleur toute les variable sont limité à 12 caractere, parce que j'ai modifier le prenom et c'était le meme chose il affichait que les 12 premier caractère.

Sinon c'est juste un exo pour les cours donc 30 caractères je pense que c'est suffisant lol
<% Bastien %> est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 11h00   #4
Candidat au titre de Membre du Club
 
Développeur informatique
Inscription : février 2007
Messages : 62
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2007
Messages : 62
Points : 11
Points : 11
Bon une fois de plus j'ai crée un nouveau topic pour rien parce que j'ai résolu le probleme tout seul lool désolé

En fait ca venait bien du oci_bind_by_name (le dernier parametre c'est la longueur de la variable php à qui l'on attribue a la variable oracle. Mais c'est bizarre parce que pour une longueur de 4 on a 12 caractere. comment ca se fait que sa augmente de 3 en 3???
<% Bastien %> est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 13h46   #5
Membre habitué
 
Avatar de Aliosha
 
Aliosha
Inscription : mars 2007
Messages : 124
Détails du profil
Informations personnelles :
Nom : Aliosha
Âge : 25
Localisation : France

Informations forums :
Inscription : mars 2007
Messages : 124
Points : 128
Points : 128
Bah dans la doc :

Citation:
Si vous devez lier des types abstraits de données (LOB/ROWID/BFILE), vous devrez l'allouer dans un premier temps, avec ocinewdescriptor(). La longueur length ne sert pas pour ces types et devrait être fixée à -1. La variable type indique au serveur Oracle, quel type de pointeur va être utilisé.
__________________
« Le vécu-plat excite le chaos-rêve. » Traité de l'inactivité, Dimitri Grouchkch.
Aliosha est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h42.


 
 
 
 
Partenaires

Hébergement Web