Conversion de SQL Server à Oracle

Dans mon projet, j'ai une database en SQL qui fonctionnait bien. Mais maintenant je dois faire l'application supporte aussi Oracle DB.

Certaines limitations que j'ai découvert était que dans Oracle, il n'y a pas de champ de bits et le nom de la table ne peut pas être supérieur à 30 caractères. Y a-t-il d'autres limites que je dois garder à l'esprit.

Toute suggestion de l'expérience passée sera utile.

Si je me souviens bien de mes premiers jours Oracle:

  • il n'y a pas de spécification de colonne IDENTITY dans Oracle (vous devez utiliser des séquences à la place)

  • vous ne pouvez pas simplement returnner un SELECT (columns) d'une procédure stockée (vous devez utiliser REF CURSOR )

  • bien sûr, tous les proc / funcs stockés sont différents (PL / SQL d'Oracle n'est pas identique à T-SQL)

La contrepartie SQL ISNULL dans Oracle est NVL

 select ISNULL(col, 0)... select NVL(col, 0)... 

Vous aurez également du mal si vous essayez de sélectionner sans un dans Oracle. Utilisez dual :

 select 'Hello' from DUAL 

Gardez à l'esprit également que dans Oracle, il existe une distinction entre PL / SQL (SQL procédural) et SQL pur. Ce sont deux langues distinctes et séparées, qui sont communément combinées.

  • Varchar dans Oracle Databases appelé varchar2 est limité à 4000 caractères
  • Oracles concept de tables temporaires est différent, ils ont une structure globale redéfinie
  • Par défaut, l'ordre de sorting et la comparaison de strings sont sensibles à la casse

Lorsque vous ajoutez une colonne à un select *

 Select * from table_1 order by id; 

vous devez préfixer le * par le nom_table ou un alias

 Select (row_number() over (order by id)) rn, t.* from table_1 t order by id; 

Oracle ne fait pas la distinction entre null et '' (string vide). Pour insert et mettre à jour vous pouvez utiliser '', mais pour interroger vous devez utiliser null

 create table t1 ( id NUMBER(10), val varchar2(20) ); Insert into t1 values (1, ''); Insert into t1 values (2, null); Select * from t1 where ssortingngval = 0; -- correct but empty Select * from t1 where ssortingngval is null; -- returns both rows 

ORACLE ne prend pas en charge la clause TOP . Au lieu de TOP, vous pouvez utiliser ROWNUM .

SQL Server: TOP (Transact-SQL)

 SELECT TOP 3 * FROM CUSTOMERS 

ORACLE: ROWNUM Pseudocolonne

 SELECT * FROM CUSTOMERS WHERE ROWNUM <= 3