Está en la página 1de 4

DML (Manipulating) - Deister KB http://kb.deister.net/index.

php/DML_(Manipulating)

DML (Manipulating)
De Deister KB

Haremos referencia a cada una de las sentencias SQL que permiten efectuar manipulación de datos como son (UPDATE, INSERT, ALTER
...). Viendo en cada una de ellas las diferencias o coincidencias existentes para los distintos agentes de bases de datos.

Contenido
1 INSERT
1.1 Valores nulos
2 UPDATE
3 DELETE
4 SELECCIÓN, INSERCIÓN y MODIFICACIÓN DE NCHAR Y NVARCHAR
5 CONSIDERACIONES
5.1 PALABRAS RESERVADAS
5.2 Cadenas vacías
5.2.1 Recomendación

INSERT
INSERT INTO nombre_tabla VALUES (col1,col2..)

Los valores de las columnas de tipo fecha o caracteres irán entre comillas simples.

CREATE TABLE t_prueba


(
codigo INT,
descri CHAR(30),
facent DATE,
PRIMARY KEY(codigo)
);

INSERT INTO t_prueba VALUES(1,'PRIMERO','01-01-2004');

--comilla doble: no la permite da error.

INSERT INTO t_prueba VALUES(1,'PRIMERO',"01-01-2004")


*
ERROR en línea 1:
ORA-00984: columna no permitida aquí

INSERT INTO t_prueba VALUES(2,'PRIMERO','01012004');

--Tratamiento de nulos: para Oracle es igual '' que NULL.

INSERT INTO t_prueba VALUES(3,'','01012004');


INSERT INTO t_prueba VALUES(4,NULL,'01012004');

SELECT * FROM t_prueba WHERE descri IS NULL

CODIGO DESCRI FACENT


------ ------------------------------ ------
3 TRES 01/01/04
4 CUATRO 01/01/04

Valores nulos

La palabra reservada NULL dispone del equivalente , con los consiguientes problemas que ello puede acarrear.

Véase el punto 3 del apartado Consideraciones para Oracle.

1 de 4 21/06/2018 13:26
DML (Manipulating) - Deister KB http://kb.deister.net/index.php/DML_(Manipulating)

UPDATE
UPDATE nombre_tabla SET col1 = value [, col2 = value ..]

Debemos utilizar la expresión general de UPDATE recordando el tratamiento de NULOS y comillas mencionado en el apartado de INSERT.

--Update normal.

UPDATE t_prueba SET descri='DOS'


WHERE descri IS NULL;

--Segunda expresión

UPDATE t_prueba SET (descri,facent) = ('SEGUNDO',SYSDATE)


WHERE descri='PRIMERO';

--Error

UPDATE t_prueba SET (descri,facent) = ('SEGUNDO',SYSDATE) ..


*
ERROR en línea 1:
ORA-01767: la expresión UPDATE ... SET debe ser una subconsulta

-- Deberemos sustituir la anterior por:

UPDATE t_prueba SET descri='SEGUNDO',facent=SYSDATE


WHERE descri='PRIMERO';

--Resultado:

Select * from t_prueba

CODIGO DESCRI FACENT


---------- ------------------------------ --------
1 SEGUNDO 21/01/04
2 SEGUNDO 21/01/04
3 DOS 01/01/04
4 DOS 01/01/04

--Compárese con el resultado de informix es diferente


--por el tratamiento del nulo

DELETE
DELETE FROM nombre_tabla WHERE (condición);

Borrado de Registros de una tabla.

SELECCIÓN, INSERCIÓN y MODIFICACIÓN DE NCHAR Y NVARCHAR


EL Tratamiento de CHAR y NVARCHAR es diferente.

Sólo se pueden usar comillas simples. Para select, insert o update se debe colocar antes una "N" del valor para indicar que se trata de NCHAR
o NVARCHAR. También se puede usar la función TRANSLATE, para traducir de tipo de dato CHAR a NCHAR y VARCHAR A
NVARCHAR.

N'valor'. Veamos algunos ejemplos:

CREATE TABLE prueba


(
col_char CHAR(10),
col_varchar VARCHAR2(30),
col_nchar NCHAR(10),
col_nvarchar2 NVARCHAR2(30)
);

2 de 4 21/06/2018 13:26
DML (Manipulating) - Deister KB http://kb.deister.net/index.php/DML_(Manipulating)

INSERT INTO prueba VALUES('aa','aa',N'aa',N'aa');

INSERT INTO prueba VALUES('aa',


'aa',
TRANSLATE('aa' USING NCHAR_CS),
TRANSLATE('aa' USING NCHAR_CS)
);

UPDATE prueba
SET col_nchar = TRANSLATE(col_char USING NCHAR_CS);

SELECT * FROM PRUEBA WHERE col_nvarchar2 =N'aa';

CONSIDERACIONES
PALABRAS RESERVADAS

Son palabras utilizadas por el sistema para realizar diversas acciones, su uso debe hacerse son precaución cuando se utilizan fuera del
contexto para las que fueron diseñadas.

No se pueden utilizar da error, la lista de palabras reservadas se pueden consultar en la documentación SQL Reference de Oracle. Se pueden
consultar en la tabla: V$RESERVED_WORDS.

CREATE TABLE t_prueba


(
level INT
);

Resultado en consola:

level int
*
ERROR en línea 3:
ORA-00904: nombre de columna no válido

Cadenas vacías

ORACLE SQL no hace diferencia entre y NULL.

Recomendación

Usando valores vacíos () para INSERT o UPDATE dará como resultado almacenamiento de NULLs con ORACLE, mientras que INFORMIX
y DB2 almacenaría los valores como una cadena de longitud cero:

INSERT INTO tab1 ( col1, col2 ) VALUES ( NULL, )

Usando la expresión comparativa (col=) con ORACLE no tiene sentido porque es equivalente a (col=NULL) las expresiones se evaluarán
siempre a falso la expresión correcta debería ser (col IS NULL).

SELECT * FROM tab1 WHERE col2 =

Solución :

Convertir expresiones tales como:

UPDATE tab1 SET col1 = "" WHERE col2 = ""

a en Oracle :

UPDATE tab1 SET col1 = NULL WHERE col2 IS NULL

Para incrementar la portabilidad, debería evitar el uso de cadenas de longitud cero en sentencias SQL, estas debería resolverse con
expresiones booleanas.

Obtenido de «http://kb.deister.net/index.php?title=DML_(Manipulating)&oldid=2582»

3 de 4 21/06/2018 13:26
DML (Manipulating) - Deister KB http://kb.deister.net/index.php/DML_(Manipulating)

Esta página fue modificada por última vez el 12 sep 2012, a las 10:22.
Esta página ha sido visitada 5.038 veces.
Política de protección de datos
Acerca de Deister KB
Aviso legal

4 de 4 21/06/2018 13:26

También podría gustarte