Pregunta

Estamos incorporando un nuevo proyecto internamente y, aunque anteriormente todo nuestro trabajo se realizaba en SQL Server, el nuevo producto utiliza un back-end de Oracle.

¿Alguien puede recomendar alguna hoja de cuna o algo similar que le brinde a una persona de SQL Server como yo un resumen de cuáles son las principales diferencias? Me gustaría poder comenzar a funcionar lo antes posible.

¿Fue útil?

Solución

@hamishcmcn

Su afirmación de que '' == Null simplemente no es cierta.En el mundo relacional, Null sólo debe leerse en el sentido de "No lo sé".El único resultado que obtendrá de Oracle (y de la mayoría de las otras bases de datos decentes) cuando compare un valor con Null es "Falso".

En lo más alto de mi cabeza, las principales diferencias entre SQL Server y Oracle son:

  • Aprenda a amar las transacciones, ellas son sus amigas, la confirmación automática no lo es.
  • Coherencia de lectura y falta de bloqueo de lecturas.
  • Base de datos de SQL Server == Esquema de Oracle
  • PL/SQL tiene muchas más funciones que T-SQL
  • Conozca la diferencia entre una instancia y una base de datos en Oracle
  • Puede tener más de una instancia de Oracle en un servidor
  • No hay asistentes puntiagudos que hagan clic (a menos que realmente los quieras)

Todos los demás, por favor ayúdenme y agreguen más.

Otros consejos

La principal diferencia que noté al pasar de SQL Server a Oracle fue que en Oracle es necesario usar cursores en las declaraciones SELECT.Además, las tablas temporales se utilizan de forma diferente.En SQL Server puede crear uno en un procedimiento y luego BORRARLO al final, pero en Oracle se supone que ya debe tener una tabla temporal creada antes de ejecutar el procedimiento.

También miraría los tipos de datos ya que son bastante diferentes.

Concatenación de cadenas:
Oráculo:|| o concat ()
Servidor SQL:+

Estos enlaces podrían ser interesantes:
http://www.dba-oracle.com/oracle_news/2005_12_16_sql_syntax_differences.htm
http://www.mssqlcity.com/Articles/Compare/sql_server_vs_oracle.htm (el viejo:Ora9 frente a SQL 2000)

@hamishmcn

Generalmente es una mala idea...Las tablas temporales en Oracle simplemente deben crearse y dejarse (a menos que se usen una vez o muy raramente).El contenido de la tabla temporal es local para cada sesión y se trunca cuando se cierra la sesión.No tiene mucho sentido pagar el costo de crear/eliminar la tabla temporal, incluso podría provocar conflictos si dos procesos intentan crear la tabla al mismo tiempo y confirmaciones inesperadas al realizar DDL.

Lo que ha preguntado aquí es un tema enorme, especialmente porque realmente no ha dicho para qué está usando la base de datos (por ejemplo, ¿va a pasar de TSQL -> PL/SQL o simplemente cambiará la base de datos backend de su aplicación Java? ¿está conectado a?)

Si realmente quiere utilizar su elección de base de datos al máximo de su potencial, le sugiero que profundice un poco más y lea algo como Arquitectura experta de bases de datos Oracle:Técnicas y soluciones de programación 9i y 10g por Tom Kyte.

Tenga cuidado con la diferencia en la forma en que se trata la cadena vacía.
INSERT INTO atable (a_varchar_column) VALUES ('');

es lo mismo que

INSERT INTO atable (a_varchar_column) VALUES (NULL);

No tengo sqlserver experiencia, pero entiendo que diferencia entre los dos

Si es necesario, puede crear y eliminar tablas temporales en procedimientos utilizando el Ejecutar Inmediato dominio.

Para andy47, no quise decir que puedas usar la cadena vacía en una comparación, pero Oracle la trata como nula si la usas en una inserción.Vuelva a leer mi entrada y luego pruebe el siguiente SQL:

CREATE TABLE atable (acol VARCHAR(10));
INsERT INTO atable VALUES( '' );
SELECT * FROM atable WHERE acol IS NULL;

Y para evitar una situación de "sí lo es, no, no lo es", aquí hay un enlace externo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top