Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 12-10-2009 11:21:32

megainfo007
Nouveau membre
Date d'inscription: 12-10-2009
Messages: 6

problème avec les le type SDO_GEOMETRY : oracle spacial

Bonjour,

je travail actuelement sur une base de donnée oracle avec des types de donné SDO_GEOMETRY  , j une table
qui contient des localisation ( x, y ) :


Code:

CREATE TABLE LOCALISATION
(
  ID_LOC NUMBER(11,0) NOT NULL,  
  LOCALISATION  TECDEV.SDO_GEOMETRY,
  DESCRIPTION VARCHAR2(100)
)

j'ai implementer l'interface Zend_Db_Table_Abstract pour la table  LOCALISATION ,

Code:

...
...
$data = array( 'ID_LOC' => 1 , 
                      'LOCALISATION' =>'SDO_GEOMETRY(2001,NULL,SDO_POINT_TYPE(12, 14, NULL),NULL,NULL)' , 
              'DESCRIPTION' => $geofence->getDescription() 
          );     

..
...
.
$this->insert ( $data );

Mais dans l'insertion j un message d'erreur  :

types de données incohérents ; attendu : MDSYS.SDO_GEOMETRY ..............

c acause de ça je crois : 'SDO_GEOMETRY(2001,NULL,SDO_POINT_TYPE(12, 14, NULL),NULL,NULL)'


quand je lance la requette a travers sql manager elle marche tres bien ,

Code:

INSERT INTO localisatio VALUES(
    1,
   'SDO_GEOMETRY(2001,NULL,  SDO_POINT_TYPE(12, 14, NULL), NULL,  NULL)',      

   'description'
   );

mais a l'aide de zend_db  non.


Merci.

Hors ligne

 

#2 12-10-2009 13:46:29

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: problème avec les le type SDO_GEOMETRY : oracle spacial

Hello,

Utilises Zend_Db_Expr, je pense que ça devrait le faire.

@+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#3 12-10-2009 15:06:13

megainfo007
Nouveau membre
Date d'inscription: 12-10-2009
Messages: 6

Re: problème avec les le type SDO_GEOMETRY : oracle spacial

Merci  [g]mikaelkael[/g] pour la réponce , sa marche nikel pour l'insertition , mais  j u un autre problème dans la
selection avec la fonction find()  de zend_db . Voici le message d'erreur :

Code:

exception 'Zend_Db_Statement_Oracle_Exception' with message '932 ORA-00932: types de donn�es incoh�rents ; attendu : CHAR ; obtenu : ADT

sad 


merci encore 1 fois .

Hors ligne

 

#4 12-10-2009 16:39:34

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: problème avec les le type SDO_GEOMETRY : oracle spacial

Hello,

Dans find(), tu ne mets que la clé primaire : ->find(1). Peux-tu montrer ton bout de code ?

@+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#5 13-10-2009 12:46:37

megainfo007
Nouveau membre
Date d'inscription: 12-10-2009
Messages: 6

Re: problème avec les le type SDO_GEOMETRY : oracle spacial

Bonjour mikaelkael ,  et merci pour ton aide smile


Voici la fonction dans ma couche DAO :

Code:

public function findLocalisationWithId($idLoc) {
   if (! isset ($idLoc))
      throw new ArgumentNullException ( "idLoc", "LocalisationDao::findLocalisationWithId" );
   try {
         $row = $this->find ( $idGeofence )->toArray ();
         if (isset ( $row ) && count ( $row ) > 0 && $row != false)
            var_dump($row [0]);
         //return self::getGeofenceFromRow ( $row [0] );
         else 
                return null;
   } catch ( Exception $exp ) { echo $exp->__toString (); }
}

je crois que le  problème est dans le zend_db, il ne peut pas détecter le type de la colonne  LOCALISATION
dans la table.


merci.

Dernière modification par megainfo007 (13-10-2009 12:49:00)

Hors ligne

 

#6 13-10-2009 14:48:54

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: problème avec les le type SDO_GEOMETRY : oracle spacial

Hello,

Au hasard : $idLoc !== $idGeofence

@+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#7 13-10-2009 16:39:25

megainfo007
Nouveau membre
Date d'inscription: 12-10-2009
Messages: 6

Re: problème avec les le type SDO_GEOMETRY : oracle spacial

haha , enfet  j modifier le code pour mettre cet exemple  ......  oui c ca ,


Code:

public function findLocalisationWithId($idLoc) {
   if (! isset ($idLoc))
      throw new ArgumentNullException ( "idLoc", "LocalisationDao::findLocalisationWithId" );
   try {
         $row = $this->find ($idLoc)->toArray ();
         if (isset ( $row ) && count ( $row ) > 0 && $row != false)
            var_dump($row [0]);
         //return self::getLocalisationFromRow ( $row [0] );
         else 
                return null;
   } catch ( Exception $exp ) { echo $exp->__toString (); }
}

j toujour le message d'erreur  a cause de la colonne LOCALISATION ( elle est de type SDO_GEOMETRY )

merci  mik smile

Dernière modification par megainfo007 (13-10-2009 17:43:29)

Hors ligne

 

#8 14-10-2009 11:25:54

megainfo007
Nouveau membre
Date d'inscription: 12-10-2009
Messages: 6

Re: problème avec les le type SDO_GEOMETRY : oracle spacial

Bonjour , c encore moi smile

j tenter d'utiliser directement le  sql dans ma requête :

Code:

select a.ID_LOC ,  a.LOCALISATION.SDO_GTYPE , a.LOCALISATION.SDO_ORDINATES 
            from TAB_LOCALISATION a

avec cette requête je reçois ce message d'erreur :

[COD]ORA-00932: types de données incohérents ; attendu : CHAR ; obtenu : ARRAY [/CODE]

la requête marche très bien sans sélectionner la colonne  SDO_ORDINATES " car elle est de type array !

j essai lancer reqûete avec SQL DEVELOPER , voici les resultats :

Code:

CREATE TABLE TAB_LOCALISATION
(
  ID_LOC NUMBER(11,0) NOT NULL,  
  LOCALISATION  TECDEV.SDO_GEOMETRY,
  DESCRIPTION VARCHAR2(100)
);


select a.ID_LOC  ,  a.LOCALISATION.SDO_GTYPE , a.LOCALISATION.SDO_ORDINATES
 from TAB_LOCALISATION a

-------------------------------------------------------------------------------------------------
ID_LOC  LOCALISATION.SDO_GTYPE   LOCALISATION.SDO_ORDINATES      
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
1               2003           NUMBER(35.24561909420681,3.427734375)         
                                                                                                                                                                    
1 rows selected

ya t'il un  moyen de définir ou convertir le type des résultats avant de lancer le fetch ?

merci 1000X.

Dernière modification par megainfo007 (14-10-2009 11:27:09)

Hors ligne

 

#9 14-10-2009 17:32:47

megainfo007
Nouveau membre
Date d'inscription: 12-10-2009
Messages: 6

Re: problème avec les le type SDO_GEOMETRY : oracle spacial

Re-bonjour ,

j essai plusieurs méthodes , mais apparament le php ne peut permet pas de caster et récupérer un objet VARRAY et le mettre dans  une collection adéquate.

je me suis débrouiller avec une fonction sql qui fait la conversion d'un type VARRAY  ---> VCHAR   

Code:

CREATE OR REPLACE
FUNCTION SDO_ORDINATE_ARRAY_TO_VARCHAR(sdoArray MDSYS.Sdo_Ordinate_Array) RETURN VARCHAR2 AS

results varchar2(1476);
BEGIN
  if sdoArray.COUNT > 1 then
     FOR i IN 2 .. sdoArray.COUNT  LOOP
       results := results || ',' || to_char( sdoArray(i) );
     END LOOP;
     results := to_char( sdoArray(1) )  || ',' ||  results;
  end if;  
  return results;
END SDO_ORDINATE_ARRAY_TO_VARCHAR;

Dernière modification par megainfo007 (15-10-2009 10:37:13)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages