UNIVERSIDAD JOSE CARLOS MARIATEGUI SQL SERVER VS ORACLE EDUARDO ACEVEDO CACERES 11 SQL SERVER VS ORACLE 2011 Diferencias entre Oracle y MS SQL Server 1. Conceptos y Terminología Última Actualización: 24/04/2001 Se aplica a: Oracle 7.3 +, MS SQL Server 6.5 + La siguiente tabla muestra algunas diferencias en los conceptos y terminología entre Oracle y MS SQL Server: Oracle MS SQL Server Base de datos del motor base de datos base de datos del servidor Base de datos (colección de tablas) esquema base de datos Funciones grupos funciones grupos Base de datos de la cuenta de administrador, dba propietario de la base sa, dbo Diccionario de Los datos sobre la base de Datos datos - Una por cada servidor Base de datos de catálogo - Uno por base de datos "Maestro" base de datos - Una por cada servidor Bloques y extensiones bloques y extensiones páginas y extensiones Software de red SQL * Net Biblioteca de red Flujo de datos de protocolo Sustrato de red transparente (TNS) Secuencia de datos tabular (TDS) Entre mayúsculas y minúsculas de los nombres de tablas, columnas, etc entre mayúsculas y minúsculas depende del orden de los caracteres tipo, por defecto es entre mayúsculas y minúsculas Sinónimos el apoyo No se admite Readonly transacción el apoyo No se admite 15 de junio de 2011 Concepto / Plazo SQL SERVER VS ORACLE 2011 2. Tipos de datos Última Actualización: 06/06/1999 Se aplica a: Oracle 7.3 +, MS SQL Server 6.5 + La siguiente tabla muestra los tipos de datos correspondientes en Oracle y MS SQL Server: Oracle MS SQL Server Cadena de longitud fija CHAR (n) - Límite de 2 KB CHAR (n), carácter (n) - Límite de 255 (6,5) - Límite de 8 KB (7.0) Cadena de longitud variable VARCHAR2 (n), VARCHAR (n) - Límite de 4 KB en una columna - Límite de 32 KB en una variable - VARCHAR es obsoleto VARCHAR (n), CHAR variable (n), CHARACTER VARYING (n) - Límite de 255 (6,5) - Límite de 8 KB (7.0) Entero INTEGER, INTEGER (n), SMALLINT INTEGER (4 bytes), INT (4 bytes), SMALLINT (2 bytes), TINYINT (1 byte), BIT (un poco) Punto Fijo Número, (n), número (n, d), Float, float (n), FLOAT (n, d) NUMÉRICO, numérico (n), numérico (n, d), DECIMAL, DECIMAL (n), DECIMAL (n, d), DEC, DEC (n), diciembre (n, d), DINERO, smallmoney De punto flotante DECIMAL Float, float (n), de doble precisión, REAL Fecha FECHA DATETIME, smalldatetime, TIMESTAMP - TIMESTAMP de autoactualización Binaria RAW (n) - Límite de 255 bytes Binary (n), varbinary (n), BINARY variable (n) - Límite de 255 (6,5) - Límite de 8 KB (7.0) 15 de junio de 2011 Tipo de datos SQL SERVER VS ORACLE 2011 Grandes cadenas LONG, LONG - Límite de 2 GB - Límite de uno por TEXTO cada fila de la tabla - Límite de 2 GB CLOB - Límite de 4 GB Binary Large LONG RAW - Límite de 2 GB - Límite de uno por IMAGEN cada fila de la tabla - Límite de 2 GB BLOB - Límite de 4 GB caracteres multi-byte NCHAR (n), NACIONAL CHAR (n), de carácter nacional (n) NCHAR (n) NVARCHAR (n), NACIONAL NVARCHAR (n) VARIABLE CHAR (n), NCLOB CARÁCTER NACIONAL - Los mismos VARIABLE (n) límites que CHAR, Ntext, text NACIONAL VARCHAR, CLOB - Los mismos límites que CHAR, VARCHAR, TEXT OS Archivo BFILE supported> <No Identificador de implícita columna fila ROWID OS seguro multinacional (Utilizar una columna de identidad) MLSLABEL, supported> <No MLSLABEL RAW Número único de 128 bits supported> <No (UUID, GUID) UNIQUEIDENTIFIER (versión 7.0) Última Actualización: 14/06/2000 Se aplica a: Oracle 7.3 +, MS SQL Server 6.5 + La siguiente tabla muestra las diferencias en los límites de Oracle y MS SQL Server: Descripción Oracle MS SQL Server Columnas por tabla 1000 250 (6.5) 1024 (7.0) Tamaño de la fila ilimitado 1962 bytes (6,5) 8060 bytes (7,0) 15 de junio de 2011 3. Límites SQL SERVER VS ORACLE 2011 - Incluye punteros, pero no los datos, para el texto y columnas de imágenes LONG y LONG RAW columnas por fila 1 (debe ser la ilimitado (puntero de 16 última columna) bytes por) ilimitado LOB, TEXT, y columnas (puntero de 16 de imágenes por fila bytes por) ilimitado (puntero de 16 bytes por) Los índices agrupados por tabla 1 1 No índices agrupados por ilimitado tabla 249 Columnas por índice 16 16 Índice de tamaño de fila 2k bytes 900 bytes Identificador de longitud 30 caracteres 30 caracteres (6,5) 128 caracteres (7,0) Tablas por SELECCIONAR 16 (6.5) 256 (7.0) ilimitado El código fuente por procedimiento almacenado Datos de los límites de tipo 64KB (6.5) 250 MB (7.0) (Ver tipos de datos ) 4. Operadores Última Actualización: 06/07/1999 Se aplica a: Oracle 7.3 +, MS SQL Server 6.5 + Descripción La concatenación de cadenas Oracle texto1 | | texto2 MS SQL Server cadena1 cadena2 + 15 de junio de 2011 La mayoría de los operadores son los mismos en Oracle y MS SQL Server. Éstos son algunos que se diferencian: SQL SERVER VS ORACLE 2011 5. Funciones incorporadas Última Actualización: 06/07/1999 Se aplica a: Oracle 7.3 +, MS SQL Server 6.5 + Oracle y MS SQL Server ofrece muchas de las mismas funciones integradas. Por ejemplo, ambos ofrecen ABS, CAD, REDONDO, superior, inferior, AVG, COUNT, SUM, ASCII, etc La siguiente tabla muestra algunas de las funciones correspondientes que no tienen el mismo nombre. Para obtener una lista completa de más información, consulte "Migración de Aplicaciones de Oracle a SQL Server" Oracle MS SQL Server Más pequeño> entero = n CEIL TECHO Módulo MOD % Truncar número TRUNCAR <none> Máximo o el mínimo número o una cadena en la lista MAYOR, POR LO MENOS <none> Traducir NULL para n NVL ISNULL Return null si dos valores DECODE son iguales NULLIF La concatenación de cadenas CONCAT (cad1, cad2) cad1 + cad2 Convierte ASCII a caracteres Comisión de Derechos Humanos CHAR Capitalizar las letras iniciales de las palabras INITCAP <none> Buscar cadena en cadena INSTR CHARINDEX Encuentra el patrón en la INSTR cadena PATINDEX Cadena de longitud DATALENGTH LONGITUD Pad cadena con espacios LPAD, en blanco RPAD <none> Recorte caracteres LTRIM (str, caracteres), iniciales o finales que no <none> RTRIM (str, caracteres) sean espacios en blanco Reemplazar caracteres en CAMBIAR la cadena COSAS Convertir el número de STR, CAST To_char 15 de junio de 2011 Descripción SQL SERVER VS ORACLE 2011 Convertir cadena en número TO_NUMBER CAST Obtener subcadena de una cadena SUBSTR SUBSTRING Char para la traducción TRADUCIR en la cadena de caracteres <none> Además de la fecha ADD_MONTH o + DATEADD Fecha de la resta MONTHS_BETWEEN o DATEDIFF - Último día del mes LAST_DAY <none> Tiempo de conversión de NEW_TIME la zona <none> día de la semana siguiente después de la fecha especificada <none> Next_day Convertir fecha a cadena To_char DATENAME, CONVERTIR Convertir cadena a fecha TO_DATE CAST Convertir fecha con el número TO_NUMBER (to_char DATEPART (d)) Fecha de vuelta RONDA CONVERTIR Fecha en que se trunca TRUNCAR CONVERTIR Fecha actual SYSDATE GETDATE Convertir hexadecimal a HEXTORAW binario CAST Convertir binario a hexadecimal RAWTOHEX CONVERTIR DECODE CASO ... CUANDO o COALESCE Si la declaración en una expresión entrada número de identificación del usuario UID, EL USUARIO o el nombre SUSER_ID, SUSER_NAME Identificación del número de bases de datos del UID, EL USUARIO usuario o el nombre USER_ID, USER_NAME El usuario actual USUARIO USUARIO 15 de junio de 2011 serie SQL SERVER VS ORACLE 2011 6. Las diferencias en la sintaxis SQL Última Actualización: 03/21/2001 Se aplica a: Oracle 7.3 +, MS SQL Server 6.5 + En la tabla siguiente se muestra la sintaxis utilizada en diferentes Oracle y MS SQL Server para el mismo las operaciones de SQL: Descripción Oracle MS SQL Server FROM tabla1 LEFT OUTER JOIN tabla2 ON table1.column1 = table2.column2 Combinación externa izquierda DONDE column1 = Columna2 (+) Nota: La siguiente sintaxis también es compatible, pero ya no se recomienda: DONDE column1 *= Columna2 FROM tabla1 RIGHT OUTER JOIN tabla2 ON table1.column1 = table2.column2 Combinación externa completa FROM tabla1 FULL OUTER JOIN tabla2 ON table1.column1 = table2.column2 SELECT sin DE 'SELECT' hola mundo de la doble 'Hola mundo' SELECT datos de CREATE TABLE AS SELECT SELECT en una ... SELECT ... INTO 15 de junio de 2011 Combinación DONDE column1 (+) = Columna2 Nota: La siguiente externa derecha sintaxis también es compatible, pero ya no se recomienda: DONDE column1 =* Columna2 SQL SERVER VS ORACLE 2011 tabla Intersección de SELECT ... INTERSECT dos SELECT ... SELECCIONA SELECT ... DONDE EXISTE (SELECT ...) SELECT ... Resta de dos DONDE NO SELECT ... MENOS SELECT ... SELECCIONA EXISTE (SELECT ...) INSERT INTO SELECT ... Crear una vista y INSERT INTO ella. Actualizar datos en una UPDATE SELECT ... combinación Crear una vista y INSERT INTO ella. UPDATE una tabla basada en supported> <No criterios de otra tabla UPDATE FROM tabla ... Eliminar filas de una tabla basada supported> <No en criterios de otra tabla DELETE FROM tabla FROM ... Quitar una columna de una <No apoyado hasta Oracle 8i> tabla ALTER TABLE nombre_tabla DROP COLUMN nombre_columna Readonly VISTA CREATE VIEW ... CON READONLY GRANT SELECT ... Punto para Salvar SAVEPOINT SALVAR LA TRANSACCIÓN Tabla de bloqueos LOCK TABLE ... IN SHARE MODE SELECT ... table_name (TABLOCK) bloqueo de tabla LOCK TABLE ... en modo Exclusiva exclusivo SELECT ... table_name (TABLOCKX) La reserva de espacio de índice PCTFREE = 0 FILLFACTOR = 100 Declarar una variable local DECLARO tipo varname; DECLARE @ tipo varname Inicializar una DECLARO tipo varname: = valor; supported> <No 15 de junio de 2011 INSERT en un JOIN SQL SERVER VS ORACLE 2011 variable local Declarar una constante varname DECLARAR CONSTANTES tipo: = valor; supported> <No Asignar a una variable varname: valor = valor SELECT INTO varname SET @ nombre_var = valor SELECT @ nombre_var = valor Asignar a una variable de un cursor FETCH NEXT cursorname TRAER EN varname cursorname DE EN varname La declaración de un cursor CURSOR CurName (s param) ES SELECT ...; DECLARE CURSOR CurName PARA SELECCIONAR ... SI ... ENTONCES ELSIF ... ENTONCES Si la declaración MÁS ENDIF SI ... EMPEZAR ... FIN Else begin ... FIN While MIENTRAS ... LAZO END LOOP MIENTRAS ... EMPEZAR ... FIN Otros lazos PARA ... END LOOP LAZO ... END LOOP supported> <No Bucle de salida SALIR, SALIR AL BREAK, CONTINUE Impresión de salida IMPRESIÓN DBMS_OUTPUT.PUT_LINE Levante de error RAISE_APPLICATION_ERROR RAISERROR Punto y coma (;) required> <Ninguna Gracias a Tom Johnston para la captura de un error en este consejo. Tuve el DOBLE DE en la columna equivocada. 15 de junio de 2011 Declaración de terminación SQL SERVER VS ORACLE 2011 7. Las diferencias en la semántica de SQL Última Actualización: 06/06/1999 Se aplica a: Oracle 7.3 +, MS SQL Server 6.5 + La siguiente tabla muestra algunas diferencias semánticas entre Oracle y MS SQL Server: Oracle MS SQL Server Comprometerse Compromiso explícito declaración requerida Automática a menos que cometan IMPLICIT_TRANSACTIONS SET Lectura de datos no confirmados Base de datos se reversión temporal interno para reconstruir los datos más recientes cometidos por los lectores. Dependiendo de las opciones, lector puede leer datos sin confirmar, o se ve obligado a esperar para el escritor para confirmar o deshacer. Liberar los datos CERRAR del cursor CURSOR libera todos los datos. No se puede volver a abrir. CERRAR cursor no publicación del informe. Usted debe llamar explícitamente a CURSOR DEALLOCATE. Hasta entonces, puede volver a abrir el cursor. Implícito de conversión de datos en una declaración como la siguiente donde vc es una columna de tipo VARCHAR2: En cada fila se recupera de la tabla, se realiza un intento para convertirlo en un número para la comparación con 123. Si cualquier fila contiene un valor que no se SELECT * FROM persona puede convertir Siendo Vc = 123 en un número, un error de tiempo de ejecución. El número 123 se convierte en la cadena '123 'una vez, y luego los datos se obtienen de la tabla. Si cualquier fila contiene un valor que no se puede convertir en un número, simplemente no se corresponde con '123 'y se salta sin ningún error. La conversión a NULL Configuración de una columna VARCHAR a''la convierte en la cadena vacía (no es NULL). Marco una columna VARCHAR2 a''(la cadena 15 de junio de 2011 Descripción SQL SERVER VS ORACLE 2011 vacía) se hace nulo. 8. Las diferencias en la gestión de bases de datos Última Actualización: 06/06/1999 Se aplica a: Oracle 7.3 +, MS SQL Server 6.5 + La siguiente tabla muestra algunas diferencias en cómo se gestionan las bases de datos en Oracle y MS SQL Server: Descripción Modelo de base de datos Oracle MS SQL Server No hay base Recién bases de datos creadas heredan de datos características (usuarios, etc) a partir de la modelo base de datos especial llamado "modelo". 9. Las diferencias en la administración de objetos de base de datos Última Actualización: 06/06/1999 Se aplica a: Oracle 7.3 +, MS SQL Server 6.5 + La siguiente tabla muestra algunas diferencias en cómo los objetos de base de datos (tablas, vistas, procedimientos almacenados, etc) se manejen de Oracle y MS SQL Server: Oracle MS SQL Server [[Servidor [.]] Base de datos [.] [] Propietario.] Tabla [[Servidor [.]] Base de datos [.] [] Propietario.] Ampliar Nombre completo [Esquema.] Tabla [Esquema.] Ampliar Temp tablas tabla # - Cualquier tabla 8i Pre: Las tablas denominada a partir de un signo temporales se deben de número (#) se borra eliminar automáticamente cuando el explícitamente usuario cierra la sesión o del procedimiento de los fines. 8i +: CREATE # # Mesa - Igual que el anterior, tabla temporal excepto que la tabla es accesible a global otros usuarios. Re-crear un objeto CREATE OR REPLACE ... Crear vista CREAR FUERZA No se admite. Tablas utilizadas LA GOTA ... CREAR ... 15 de junio de 2011 Descripción SQL SERVER VS ORACLE antes de las tablas dependientes DE VISTA 2011 por vista debe existir antes vista puede ser creado. 10.Las diferencias en la Administración de usuarios Última Actualización: 06/06/1999 Se aplica a: Oracle 7.3 +, MS SQL Server 6.5 + La siguiente tabla muestra algunas diferencias en cómo los usuarios se gestionan de Oracle y MS SQL Server: Descripción Oracle Cada usuario puede ser La pertenencia miembro de cualquier a grupos número de grupos. MS SQL Server Cada usuario puede ser miembro de un solo grupo que no sea "pública". 11.Las diferencias en la integración con MS ADO, RDO, etc. Última Actualización: 06/06/1999 Se aplica a: Oracle 7.3 +, MS SQL Server 6.5 + La siguiente tabla muestra las diferentes técnicas utilizadas en Oracle y MS SQL Server para interactuar con MS ADO, RDO, etc: Oracle Devuelve un identificador de un Devolver un conjunto cursor. de registros a la Para más información: persona que llama Véase el artículo de KB Q174679 de MS. MS SQL Server SELECT sin cláusula INTO; Selecciona varias tales regresar varios conjuntos de registros 15 de junio de 2011 Descripción SQL SERVER VS ORACLE 2011 12.Las diferencias Varios Última Actualización: 06/06/1999 Se aplica a: Oracle 7.3 +, MS SQL Server 6.5 + La siguiente tabla muestra las diferencias entre los diversos Oracle y MS SQL Server: Oracle MS SQL Server IDENTIDAD columna de una tabla Generar números únicos CREATE SEQUENCE Cascada SUPR DELETE (Uso de CASCADE ... disparadores) Llamar a una función definida por el usuario a partir de una instrucción el apoyo SQL (como la columna de SELECT o expresión en la cláusula WHERE) No se admite 15 de junio de 2011 Descripción