Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1279 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Conversion mysql vers oracle

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Conversion mysql vers oracle

n°821204
Kenadan
Twin rulez
Posté le 12-08-2004 à 11:03:03  profilanswer
 

Bon voila je manipule une base de donnes Mysql (avec php)et dans le cadre de la mise en production du prog je vais sans doute devoir passer sur oracle .
Quelqu un connaitrait un site recapitulant les differences (fonctions equivalentes , etc ..) ?

mood
Publicité
Posté le 12-08-2004 à 11:03:03  profilanswer
 

n°821318
Beegee
Posté le 12-08-2004 à 12:16:17  profilanswer
 

c'est probablement plus simple dans ce sens là que dans l'autre en ce qui concerne les requêtes SQL, car Oracle est plus complet que mySql (requêtes imbriquées, etc.).

n°821619
Arjuna
Aircraft Ident.: F-MBSD
Posté le 12-08-2004 à 16:08:41  profilanswer
 

Le seul TRES gros souci, c'est qu'Oracle ne supporte pas le LIMIT.
 
Donc partout où tu en a mis un, tu vas t'amuser...
Tu peux toujours utiliser cette fonction PHP :
db_query_limit($query,$id_connexion,$debut,$fin)
 
Sinon, il y a une requête un peu complexe à écrire avec Oracle, et ça permet d'émuler un LIMIT n,m
 
Sinon, j'ai parcouris très rapidement ce site, je pense qu'il te sera utile :
http://didier.deleglise.free.fr/php/mysql_oracle.htm

n°821641
Beegee
Posté le 12-08-2004 à 16:37:30  profilanswer
 

en même temps, il doit pas y avoir beaucoup d'utilisation d'un LIMIT n,m sous mySql ...
 
et si y a de telle requêtes, on peut aussi le faire en Oracle, avec des ORDER BY et ROWNUM ...

n°821643
Arjuna
Aircraft Ident.: F-MBSD
Posté le 12-08-2004 à 16:42:21  profilanswer
 

ouais, mais la syntaxe est beaucoup plus lourde sous Oracle. C'est pour moi le point le plus bloquant.
 
PS: Les LIMIT n,m tu en as dès que tu fait de l'affichage d'une liste sur plusieurs pages (catalogue, moteur de recherche, etc.) un certains sites peuvent au contraire en avoir énormément.

n°821663
Beegee
Posté le 12-08-2004 à 17:01:30  profilanswer
 

c'est un des seuls cas où la syntaxe Oracle est plus lourde que celle de mySql ... donc ok, c'est lourd, mais il suffit de le faire une fois, et c'est pas si dur à écrire :D
 
par contre, les requête imbriquées, le bonheur :)

n°821702
Beegee
Posté le 12-08-2004 à 17:26:59  profilanswer
 

On peut faire quelquechose comme ça par exemple sous Oracle, pour le LIMIT :
 

Code :
  1. select customer_ref, rn from
  2.     (select customer_ref, rownum rn from
  3.         (select * from customer order by customer_ref
  4.         )
  5.     )
  6. where rn > 10
  7. and rn < 20;

n°821742
Arjuna
Aircraft Ident.: F-MBSD
Posté le 12-08-2004 à 18:17:23  profilanswer
 

Beegee a écrit :

c'est un des seuls cas où la syntaxe Oracle est plus lourde que celle de mySql ... donc ok, c'est lourd, mais il suffit de le faire une fois, et c'est pas si dur à écrire :D
 
par contre, les requête imbriquées, le bonheur :)


 
Mais c'est pour ça que je la cite, parceque je pense que c'est le seul vrai truc emmerdant, pour le reste, pas de problème particulier.

n°821744
Arjuna
Aircraft Ident.: F-MBSD
Posté le 12-08-2004 à 18:19:31  profilanswer
 

Beegee a écrit :

On peut faire quelquechose comme ça par exemple sous Oracle, pour le LIMIT :
 

Code :
  1. select customer_ref, rn from
  2.     (select customer_ref, rownum rn from
  3.         (select * from customer order by customer_ref
  4.         )
  5.     )
  6. where rn > 10
  7. and rn < 20;



Je pense qu'il vaut mieu utiliser la foncton PHP. En effet, niveau perfs, le curseurs devrait rester côté serveur si la fonction est bien écrite, donc ça change pas grand chose, et surtout, ça évide de changer les requêtes (juste virer le limit). C'est donc moins contraignant pour la maintenance.

n°821746
Arjuna
Aircraft Ident.: F-MBSD
Posté le 12-08-2004 à 18:22:12  profilanswer
 

PS: where rn > 10 ne retournera jamais de ligne.
En effet, rownum correspond au numéro de la ligne RETOURNEE, donc si tu vires la 1, la suivante prends la valeur 1 et ainsi de suite : aucune ligne ne passe.
 
Il faut donc faire ça :
 


select fields from (select fields, rn from  
      (select fields, rownum rn from  
          (select fields from customer order by customer_ref order by fields) where rn < 20 order by fields desc
      ) where rn > 10) order by fields


 
Ce qui est légèrement plus lourds ;)

mood
Publicité
Posté le 12-08-2004 à 18:22:12  profilanswer
 

n°822010
Beegee
Posté le 13-08-2004 à 01:14:44  profilanswer
 

Si, le rn > 10 marche dans ce cas précis, car on fait stoquer les valeurs de rownum de la sous-requête ;)
=> testé et approuvé ;)
 
Ce qui ne marche pas c'est de faire un rownum > 10 directement :)

n°822025
Arjuna
Aircraft Ident.: F-MBSD
Posté le 13-08-2004 à 03:26:30  profilanswer
 

ha oui en effet :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Conversion mysql vers oracle

 

Sujets relatifs
openoffice php mysql[mysql] piti probleme mysql
[PHP/MYSQL] Une BD des marques + modèles de voitures ?MySQL et les apps graphiques
[SGBD] Equivalent de rownum avec MySQL ?PHP/MYSQL et les photos
[Delphi/MySQL] Débordement BCDphp/mysql avec dreamweaver
Acces query sur une bd oracle dejà linkée 
Plus de sujets relatifs à : Conversion mysql vers oracle


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR