Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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 ) :
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 ,
... ... $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 ,
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
Hello,
Utilises Zend_Db_Expr, je pense que ça devrait le faire.
@+
Hors ligne
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 :
exception 'Zend_Db_Statement_Oracle_Exception' with message '932 ORA-00932: types de donn�es incoh�rents ; attendu : CHAR ; obtenu : ADT
merci encore 1 fois .
Hors ligne
Hello,
Dans find(), tu ne mets que la clé primaire : ->find(1). Peux-tu montrer ton bout de code ?
@+
Hors ligne
Bonjour mikaelkael , et merci pour ton aide
Voici la fonction dans ma couche DAO :
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
Hello,
Au hasard : $idLoc !== $idGeofence
@+
Hors ligne
haha , enfet j modifier le code pour mettre cet exemple ...... oui c ca ,
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
Dernière modification par megainfo007 (13-10-2009 17:43:29)
Hors ligne
Bonjour , c encore moi
j tenter d'utiliser directement le sql dans ma requête :
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 :
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
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
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
Pages: 1