Migration requetes microsoft SQL vers SQL oracle

Résolu
alamoa
Messages postés
7
Date d'inscription
mardi 14 mai 2002
Statut
Membre
Dernière intervention
26 juin 2009
- 23 juin 2009 à 12:02
alamoa
Messages postés
7
Date d'inscription
mardi 14 mai 2002
Statut
Membre
Dernière intervention
26 juin 2009
- 26 juin 2009 à 14:00
Bonjour,
je recherche un outil (ou une methode) me permettant de migrer mes requetes ecrites pour Microsoft SQL en Oracle SQL.
J'ai farfouillé sur le site , sur le net, on trouve l'inverse uniquement (oracle vers microsoft)
merci d'avance

6 réponses

nivsql
Messages postés
159
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
14 décembre 2010

24 juin 2009 à 13:10
Cela fait partie des synthaxes qui n'appartiennent pas a la norme. Elles sont donc implémentées au bon vouloir des éediteurs. Cela vas etre le cas de toutes les synthaxe qu'on pourrait appeler "Cosmétique" (de présentation). Mais en dehors de ces synthaxe la, cela devrait passer correctement.
3
nivsql
Messages postés
159
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
14 décembre 2010

26 juin 2009 à 13:16
Après avoir creuser un peu le sujet je pense que tu devra aussi faire attention aux appel de fonction dans les requete, notement les fonction de manipulation de chaine de caracteres et de dates qui different entre les 2 moteurs.

Hormis cela, le reste doit etre compatible, notement les appel de CASE dans les requete qui sont compris par ORACLE depuis la version 9i.
Si toutefois tu avais un probleme avec un CASE tu pourras le migrer avec la fonction oracle DECODE.

Dans les autres Tips au niveau de la manipulation des champs date Oracle offre 2 fonctions assez simple (bien plus qu'en SQL Server) TO_DATE et TO_CHAR.

Pour exemple une synthaxe SQL Server CONVERT(VARCHAR, <champ date>, 103) s'ecrira TO_CHAR(<champ date>, 'DD/MM/YYYY') et inversement CONVERT(DATETIME, <chaine de caractere de type JJ/MM/AAAA>, 103) deviendra TO_DATE(<chaine de caractere de type JJ/MM/AAAA>, 'DD/MM/YYYY')

Je précise à ce titre qu'oracle est bien plus souple que SQL Server dans ce genre de manipulation puisque SQL Server implémente un nombre défini de formatage de date (voir tableau dans l'aide de CONVERT) alors qu'oracle ne requiere pour la fonction TO_DATE qu'un pattern libre composé de sous pattern défini. Rien ne t'empeche en Oracle d'ecrire une date sous la forme DD£MMšYYYY si ca t'amuse.
3
nivsql
Messages postés
159
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
14 décembre 2010

24 juin 2009 à 12:10
Si cela ne concerne que des requete simples il n'y a pas de probleme de toute facon, SQL Server etant beaucoup plus normatif qu'Oracle les requete SQL Server fonctionnent sur oracle. S'il s'agit de bloc de traitement T-SQL a transformer en PL/SQL ca risque d'etre un peu plus complexe. Je ne connais pas d'outil mais selon la complexité du code on doit pouvoir établir des regles de transformations. Je vais travailler la dessus, je te tiens au courrant.
0
alamoa
Messages postés
7
Date d'inscription
mardi 14 mai 2002
Statut
Membre
Dernière intervention
26 juin 2009

24 juin 2009 à 12:56
merci:
en fait oui les requetes simples fonctionnent mais un truc tout bete :
en SQL :
select top 1 * from TABLE where CONDITION

s'ecrit en oracle :
select * from TABLE where CONDITION and rownum = 1

ca a l'air bete mais si on multipli ca par 10000 ou 20000, la galere !!!

merci de ta participation
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nivsql
Messages postés
159
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
14 décembre 2010

24 juin 2009 à 13:19
Tant que je suis la je vais te donner un premier tips qui me viens en tête :

La fonction SQL Server coalesce() est a remplacer par nvl() avec une difference majeure, coalesce accepte un nombre infinie d'argument, nvl n'en accepte que 2. Cela dis les 2 fonctions ont la meme utilité dans 99.9% des cas.

Pour rappel :
SQL :  coalesce(colonne1, 'label 1') => Si colonne1 est null alors remplace la valeur null par 'label 1'
SQL non traductible en oracle : coalesce(colonne1, colonne2, ...,colonneN, 'label1') => Si colonne1 est null utilise la valeur de colonne2 sauf si elle est null dans ce cas prend celle de colonne3 etc, en dernier lieu si colonneN est null prend 'label1'.
Oracle : nvl(colonne1, 'label 1') => Si colonne1 est null alors remplace la valeur null par 'label 1'
0
alamoa
Messages postés
7
Date d'inscription
mardi 14 mai 2002
Statut
Membre
Dernière intervention
26 juin 2009

26 juin 2009 à 14:00
merci beaucoup pour ces precisions .
je vais essayer de ma faire moi meme le traducteur : car notre façon d'ecrire les requetes avec le SQL server est "exotique" .
en fait nous gerons une appli ecrite (et sans cesse ameliorée voir pluggée de specifs suivant les clients) toujours ecrite a la base pour SQL Server, mais nous avons des clients aussi sous ORACLE donc on voudrait eviter de tout reecrire en oracle a chaque fois : on ne peut pas ecrire d'abord en oracle et convertir apres car trop peu de nos developpeurs maitrisent Oracle .
Voila
encore merci
tres cordialement
0