Sunteți pe pagina 1din 16

SQL (ORACLE)

(En algunos SQL las ordenes acaban en ; . En otros no)


A) TIPOS DE DATOS
A.1) ESTANDAR
TIPO DE DATO CARACTERISTICAS
CHAR(n) Cadenas de longitud fija. Tam mx: 255 caracteres Si se quiere meter una cadena ms
grande que el campo ERROR
VARCHAR2(n) Cadenas de longitud variable. Tam mx: 2000 caracteres.
LONG Son los campos memo. Tam mx: 2 Gb (+ de 2000 millones de caracteres). Tienen
muchas restricciones (no se pueden meter dentro de condiciones en la SELECT,)
NUMBER Cualquier tipo de nmero. Formato: NUMBER [(<precisin>[, <escala>])]
<precisin>: n de cifras que tiene el n, incluyendo los decimales. (valores permitidos
son entre 1 y 38). Por defecto es el mximo (38). Si se incluye este parmetro, el n es
un decimal de coma fija. Si no se incluye, el n es de coma flotante.
<escala>: N de decimales. Valores posibles (de -84 a 127)(si no se pone escala, n
decimales = 0)
DATE Fechas.
ISNULL Campos con valores nulos
a) Los datos de tipo CHAR, VARCHAR2 y LONG van entre comillas simples (' '). Para meter una comilla simple hay que ponerla
dos veces seguidas.
b) Para meter fechas se usa este formato {d 'ao-mes-dia'} .
Ejemplo:
UPDATE DATOS SET FECHA = {d '1997-12-31'} WHERE FECHA IS NULL;
c) En campos NUMBER se usa el punto para separar los decimales (da igual como est la configuacin regional de Windows).

Forma de guardar n
os
en campos numricos
Valor Opciones elegidas Cmo es almacenado
7456123,89 NUMBER 7456123,89
7456123,89 NUMBER(9) 74561234
7456123,89 NUMBER(9,2) 7456123,89
7456123,89 NUMBER(9,1) 7456123,9 (redondea)
7456123,89 NUMBER(6) ERROR. EXCESO DE PRECISION
1

7456123,89 NUMBER(15,1) 7456123,8 (no redondea)
7456123,89 NUMBER(7,-2) 7456100
2

7456123,89 NUMBER(7,2) ERROR. EXCESO DE PRECISION
7456123,89 NUMBER(7,-7) ERROR. EXCESO DE PRECISION
7456123,89 NUMBER(8,-7) 10000000
A.2) NO ESTANDAR
Tipos de datos especiales del sistema (slo para ORACLE):
ROWID: Almacena la direccin fsica de cada tupla de la base de datos
Formado por: [identificador de bloque].[identificador de tupla].[identificador de fichero]
ROWNUM: Para cada tupla por consulta devuelve un n indicando el orden en que ORACLE selecciona la tupla desde una tabla o
resultado de un JOIN de varias tablas.
SECUENCIAS: Es un objeto de la base de datos desde el que un usuario puede generar enteros nicos.
Formato para crear secuencia: CREATE SEQUENCE <nombre secuencia> [INCREMENT BY <entero>] [START WITH
<entero>] [MAXVALUE <entero>] [MINVALUE <entero>] [CYCLE | NOCYCLE]
Formato para borrar secuencia: DROP SEQUENCE <nombre secuencia>
Sacar valor actual de la secuencia: <nombre secuencia>.CURRVAL
Sacar siguiente valor de la secuencia: <nombre secuencia>.NEXTVAL
TABLA DUAL: Tabla creada automticamente por ORACLE en el diccionario de datos. Es accesible por todos los usuarios.
Tiene un solo campo y un solo registro. Es una tabla comodn.
Ejemplos:
SELECT ADD_MONTHS(SYSDATE,2) "fecha de hoy + 2 meses" FROM DUAL;
TABLA TAB: Tabla creada automticamente. Tiene los nombres de las tablas
TABLA COL: Tabla creada automticamente. Tiene los nombres de los campos de todas las tablas.

1
Si el (n de dgitos de la parte entera) > (precisin - escala), se produce un error de exceso de precisin.
2
Si escala es < 0 , se redondean las ultimas cifras de la parte entera
B) DEFINICIONES
ALIAS o SINONIMOS (SYNONYM): Sirve para no tener que usar nombres largos a la hora de usar campos de tablas hechas
por otros usuarios
INDICES (INDEX): Los ndices son estructuras que proporcionan un acceso rpido a las filas de una tabla en base a los
valores de una o ms columnas. Todos los datos estn ordenados para tardar menos en buscarlos Son transparentes al usuario.
La principal ventaja es que se tarda menos tiempo en buscar datos. El principal inconveniente es el tiempo perdido en
actualizar ndices cada vez que se aaden/editan/eliminan registros.
TRANSACCIONES: Conjunto de instrucciones de LMD ejecutadas unas tras otras. Si las transacciones no son completas (se
produce cualquier error) se debe dar marcha atrs. (ROLLBACK)
VISTAS (VIEW): Las vistas son tablas virtuales formadas a travs de una consulta a partir de otras tablas y/o vistas existentes
en la base de datos. Sirve para crear esquemas externos.
SUBCONSULTAS: Permiten el encadenamiento de varias consultas dentro de la misma SELECT. Hay varios tipos:
Subconsulta mediante comparadores: Se usan los operadores >, <, <> si el valor que devuelve la subconsulta es nico. Si
no es nico, se debe usar [NOT] IN
Subconsultas con ALL (Operador / del A.R ): La condicin debe cumplirse para todos los valores de la subconsulta.
Subconsultas con ANY: La condicin debe cumplirse para algn valor de la subconsulta.
Subconsultas anidadas correlacionadas: Una subconsulta anidada es correlacionada si se evala una vez por cada tupla
procesada en la sentencia padre. Selecciona el registro de la consulta principal si la subconsulta devuelve algn valor.
Formato: SELECT <campos> FROM <tabla1> <alias1>
WHERE <expr> [NOT] EXISTS (SELECT <campos> FROM <tabla2> <alias2>
WHERE <alias2>.<campo> <operador> <alias1>.<campo>)

C) COMANDOS DEL SQL DE ORACLE (ORDENADOS A - Z)
- A -
ALTER TABLE: Modifica estructura de la tabla (pone/quita campos, pone/quita ndices,). No se pueden destruir campos con
esta orden. ADD se pone al aadir o editar campos.
Formato: ALTER TABLE <nombre tabla> [ADD (<nombre campo y caractersticas>)]
[DROP PRIMARY KEY][DROP FOREIGN KEY][ <definir clave primaria>][<definir clave fornea>]
Ejemplos:
ALTER TABLE prueba ADD (precio NUMBER(6))
ALTER TABLE prueba ADD (precio CHECK precio > 5)
ALTER TABLE prueba FOREIGN KEY en_region (region) REFERENCES regiones
ALTER TABLE prueba DROP FOREIGN KEY (region)
ALTER TABLE referencia add primary key (clave_ext)
ALTER TABLE prueba FOREIGN KEY ciudad REFERENCES regiones ALTER TABLE prueba
FOREIGN KEY ciudad (ciudad) REFERENCES regiones
- C -
COMMIT: Transaccin realizada con xito. Formato: COMMIT [WORK]. Ejemplo: COMMIT
CREATE INDEX: Crea ficheros de ndice.
Formato: CREATE INDEX <nombre ndice> ON <nombre tabla> (<campos que forman la clave>) [ASC | DESC]
ASC ordena de < a > ; DESC ordena de > a <.
Ejemplo:
CREATE INDEX OFI_IND ON oficinas (NOMB_OF)
CREATE SYNONYM: Sirve para poner un nombre ms corto a las tablas de otros usuarios
Formato: CREATE SYNONYM <nombre> FOR <tabla> Crea sinnimo
Ejemplo: CREATE SYNONYM VENTAS FOR ADMI_PP.VENTAS
CREATE TABLE: Crea tablas vacas.
Formato 1: CREATE TABLE <nombre
3
> (<definicin de columnas>), <clave principal>, <clave fornea>, <campos que no
pueden tener valores duplicados>) crea una tabla nueva
Formato 2: CREATE TABLE <nueva tabla> AS <una SELECT> crea una copia de una tabla
<definicin de campos>: Van entre ( ) y separados por comas. Formado por: <nombre campo> <tipo dato> [WITH DEFAULT
"<valor por defecto>"][NOT NULL].
<clave principal>: PRIMARY KEY <nombre columna>
<clave fornea>: FOREIGN KEY <nombre campo> REFERENCES TO <nombre tabla> ON DELETE [RESTRICT | CASCADE
| SET NULL]
<campos que no pueden tener valores duplicados>: UNIQUE <nombre campo>
La clave principal debe ser NOT NULL
La clave fornea no debe ser NOT NULL
La clave debe existir
Si no se indica tipo de borrado, se elige RESTRICTED
Ejemplo:
CREATE TABLE oficinas
(COD_OF INTEGER NOT NULL, Primer campo
REGION VARCHAR2(20) WITH DEFAULT "ESTE" NOT NULL,
CIUDAD VARCHAR2(20) NOT NULL,
DIR INTEGER, Ultimo campo
PRIMARY KEY (COD_OF), Clave principal
FOREIGN KEY ESTA_EN (DIR) Clave fornea
REFERENCES DIRECCIONES Otra tabla
ON DELETE CASCADE) Tipo de borrado para claves forneas
CREATE VIEW: Crea una vista. Las vistas son tablas virtuales formadas a travs de una consulta a partir de otras tablas y/o
vistas existentes en la base de datos. Sirve para crear esquemas externos.
Formato:
CREATE VIEW [OR REPLACE] [FORCE | NOFORCE] <nombre de vista> [(<nombre campos>)]
AS <aqu va una SELECT>
[WITH CHECK OPTION [CONSTRAIT <restriccin>]]
Los nombres de columnas son opcionales. Si se ponen se deben poner todos o ninguno (slo el nombre del campo
Es obligatorio cuando se devuelve un valor calculado, es decir cuando la columna ha sido calculada dentro de la vista.
Es obligatorio cuando sacamos una vista que combina diferentes tablas
Opciones;
OR REPLACE: Si existiese una vista con ese mismo nombre, con esta opcin se reemplaza el nombre. Indica que existe ya
una vista con el mismo nombre y que sea sustituida por otra.
FORCE: Crea la vista aunque no existan los objetos.
NOFORCE: Funciona al revs que FORCE.
WITH CHECK OPTION: Valida las tuplas para saber si esas tuplas se pueden meter, modificar,
CONSTRAINT <restriccin>: Pone restricciones. Se usa en casos muy especiales.
Ejemplo de vista horizontal (todos los campos):
CREATE VIEW oficinas_este AS SELECT * FROM oficinas WHERE region = 'este'
Ejemplo de vista vertical (se especifican campos):
CREATE VIEW oficinas_este AS SELECT cod_ofi, nom_ofi FROM oficinas
Ejemplo de vista mixta (es horizontal y vertical a la vez) (se especifican campos):
CREATE VIEW oficinas_este AS SELECT cod_ofi, nom_ofi FROM oficinas WHERE cod_ofi IN
[1,2,8,9]

3
En ORACLE se pueden poner nombres de 30 caracteres mximo. En otros SGBD se pueden poner + o -. Los
nombres no deben producir conflictos (por ej: coincidir con una palabra clave)
- D -
DELETE FROM: Elimina registros de una tabla.
Formato 1: DELETE FROM <tabla> [WHERE <condicin>]
Formato 2: DELETE FROM <tabla> [WHERE <aqu va una SELECT>]
Si no se pone la condicin se borran todos.
Ejemplos:
DELETE FROM juegos
WHERE (cod < 10)
DELETE FROM CI071
WHERE FLD4 IN (SELECT FLD4 FROM CI071 WHERE FLD4 NOT LIKE '-%');
(Elimina registros en albaranes_prov_cab_hist si no existen registros en pedidos_prov_cab con el codigo indicado)
delete from albaranes_prov_cab_hist
where cod_albaran = 'dedede' and cod_proveedor = 'PERSONA4' AND
(select count(*) from albaranes_prov_lin_hist
where cod_albaran = 'dedede' and cod_proveedor = 'PERSONA4') = 0;
DROP INDEX: Elimina el ndice. Formato: DROP INDEX <nombre ndice>
Ejemplo: DROP INDEX ndx_moto
DROP SYNONYM: Elimina el sinnimo. Formato: DROP SYNONYM <nombre>
Ejemplo: DROP SYNONYM ventas
DROP TABLE: Elimina una tabla. Se pierden todos los datos de la tabla
Formato: DROP TABLE <nombre tabla> [CASCADE CONSTRAINT]
CASCADE CONSTRAINT: Se borran todas las restricciones de integridad referencial que hacen referencia a la clave
primaria o nica de la tabla a borrar. Se le indica al sistema que se conocen las restricciones, pero que aun as se quiere
eliminar.
Ejemplo: DROP TABLE motos CASCADE CONSTRAINT
DROP VIEW: Todas las referencias que pertenecen a la vista se deben redefinir o eliminar para evitar errores,
Si se tiene una vista definida sobre otra y desaparece la 2, entonces la 1 vista no funciona.
Formato: DROP VIEW <nombre de vista>
Ejemplo: DROP VIEW vista_01
- G -
GRANT...ON...TO: Se dan privilegios de acceso a un usuario para las tablas seleccionadas.
Formato: GRANT <permisos> ON <objeto> TO [ PUBLIC | < usuarios>] [WITH GRANT OPTION]
WITH GRANT OPTION: Los usuarios seleccionados pueden dar privilegios a otros.
PERMISOS QUE SE PUEDEN USAR CON GRANT & REVOKE
PERMISOS QUE HACE CADA UNO
ALTER Aadir / eliminar campos y renombrar tablas
ALL Todos los permisos
DELETE Borrar registros
INDEX Crear ndices
INSERT[(campos)] Insertar registros
REFERENCES Crear referencias (claves externas))
SELECT [(campos)] Permite lectura de campos de tablas (Por defecto: Todos)
UPDATE[(campos)] Permite modificar datos de campos de tablas (Por defecto: Todos)
Ejemplo:
GRANT UPDATE(empresa, cliente) ON clientes TO rodolfo
GRANT ALL TO oscar
- I -
INSERT INTOVALUES: Mete valores en una tabla. Los coloca donde le parezca.
Formato 1 (un registro): INSERT INTO <nombre tabla> [(<Lista de campos>)] VALUES (<Lista de valores>).
Formato 2 (muchos registros): INSERT INTO TABLA <una SELECT>
Si el campo es carcter (VARCHAR2, CHAR o LONG) se debe poner entre comillas.
Si el campo es numrico (NUMBER), no se pone comillas.
En los campos carcter se puede meter el NULL, pero si se ha definido antes al campo con la opcin NOT NULL, da error.
Si no se incluyen los campos, se refiere a todos los campos. Influye el orden en que se colocaron en la tabla.
Ejemplo:
INSERT INTO coches (MARCA, MODELO) VALUES ('CITROEN', 'ZX') Inserta un registro
INSERT INTO proveedores VALUES ('P1', 'TOMAS', 'A', 'BILBAO') Inserta un registro
INSERT INTO p11 SELECT * FROM p10 WHERE cod_prov = 'S1'
- L -
LOCK TABLE: Se usa para bloquear una tabla o vista. El objetivo es garantizar que durante el tiempo que se trabaje con ella la
tabla No es modificada por el usuario y Otros usuarios no puedan acceder a la tabla. Para poder realizar esta operacin basta
con tener algn privilegio.
Los bloqueos se pueden quitar con COMMIT & ROLLBACK
Formato: LOCK TABLE [<esquema>.[<tabla> | <vista>]] IN <modo bloqueo> MODE [NOWAIT]
Opciones:
<modo bloqueo>: Operaciones permitidas mientras dura el bloqueo.



NOWAIT: No espera hasta que finalice el bloqueo (si no se pone esta opcin y se intenta entrar una tabla bloqueada el SGBD
se queda esperando hasta que termine el bloqueo)
Tipo de bloqueo Efectos que tiene ese bloqueo en la base de datos
ROW SHARE (mnimo) Nivel mnimo de bloqueo. Se usa para modificar algunas filas. Los dems usuarios pueden
consultar o modificar otras filas. Los otros no pueden usar LOCK EXCLUSIVE.
ROW EXCLUSIVE Es como la anterior pero prohibe que otros usuarios bloqueen la tabla para uso compartido.
SHARE No deja que otros usuarios bloqueen la tabla de forma ms restringida (Permite bloqueos de
menor o igual nivel). Permite que los usuarios vean la tabla, pero las actualizaciones slo se
pueden realizar sobre filas especficas.
SHARE ROW EXCLUSIVE No permite ms bloqueos sobre la tabla. Permite que se vean los registros
EXCLUSIVE (mximo) Nivel mximo de bloqueo. El usuario que realiza el bloqueo es el nico que puede hacer
operaciones sobre la tabla. Los otros usuarios no pueden hacer nada.
Ejemplos:
LOCK TABLE motos IN SHARE MODE NOWAIT
LOCK TABLE coches IN ROW SHARE MODE
- R -
RENAME: Cambia el nombre de una tabla. Formato: RENAME <tabla1> TO <tabla2>
Ejemplo:
RENAME tmp1 TO tmp3
REVOKEONFROM: Quita permisos. Formato: REVOKE <permisos> ON <tabla> FROM {PUBLIC | <usuarios>}
[CASCADE CONSTRAINTS]
Los permisos son los mismos que los de GRANT.
CASCADE CONSTRAINTS elimina todas las referencias
Ejemplo: REVOKE ALL ON juegos FROM picnic
ROLLBACK: Se ha producido un error en la transaccin. No guarda los cambios realizados.
Formato: ROLLBACK [WORK] [TO <punto de referencia>].
Los puntos de referencia sirven para dividir una transaccin grande en varias partes. Si se usa la opcin TO <punto de ref> no
repite toda la transaccin desde el principio. (lo hace desde ese punto)
Ejemplo: ROLLBACK
- S -
SAVEPOINT: Crea puntos de referencia. Formato: SAVEPOINT <nombre punto de referencia>
Ejemplo: SAVEPOINT p1
SELECTFROM: Selecciona los datos que interesan de una tabla o muchas. Se parece a la orden SET FILTER TO del dBase
Formato: SELECT [DISTINCT] <*| lista de campos> [expresiones
4
] [[AS] "<alias>"] >
FROM <tablas> [[AS] <alias>]
[WHERE <condicin>]
[GROUP BY <lista de campos>
[HAVING < condicin>]]
[ORDER BY <lista de campos> [ASC | DESC] ]
[INTO TEMP < nombre tabla temporal>]
[{UNION [ALL] | INTERSECT | MINUS} <otra select>]
1) OPCI ONES QUE PUEDEN PONERSE ENTRE SELECT Y FROM
*: Todos los campos
DISTINCT: No muestra datos repetidos (campos con el mismo valor).
DISTINCTROW: No muestra datos repetidos (registros con el mismo valor).
<lista de campos>: Campos que se van a usar.
<expresiones>: Al poner una expresin se consigue crear un nuevo campo en memoria en que se guarda el resultado de esa
expresin. Se pueden usar los operadores +, -, /,
<alias>: Otra forma de llamar a las tablas. Primero se pone la tabla que se va a usar y despus el alias separado por un espacio.
Ejemplos: SELECT tipo, nombre FROM TABLA T1 el alias es T1
3. PONER CONDI CI ONES CON WHERE
Se pueden usar los operadores lgicos AND, OR y NOT para unir condiciones y tambin , , , , , ! y
Otras posibilidades son:
<campo> [NOT] BETWEEN <val1> AND <val2>: Slo selecciona los registros que el contenido del campo est entre
<val1> y <val2>. Puede ser un n o una fecha.
<campo> [NOT] IN (<lista de valores>): Se seleccionan los registros en que el contenido del campo coincida con alguno de
los valores puestos despus de IN.
<campo> [NOT] LIKE <cadena>: Se seleccionan todos los registros que el contenido del campo sea <cadena>.
Comodines
5
: _: Sustituye un carcter. %: Sustituye varios caracteres
<campo> [NOT] MATCHES <cadena>: Se seleccionan todos los registros que el contenido del campo sea <cadena>.
Comodines: ?: Sustituye un carcter. *: Sustituye varios caracteres.
<campo> IS [NOT] NULL: Se selecciona los campos que su contenido sea NULL.
SCAPE '<carcter>': Si encuentra ese carcter, que salte
3.1. PONER UNA SELECT DENTRO DE UNA CONDI CI ON
Se usa cuando se debe poner una funcin (MAX,MIN... ) dentro de una expresin.
Ejemplo: (La SELECT que est dentro de la condicin selecciona el valor mximo del campo UNIDADES cuando
NUMSTOCK es 9. Esta SELECT devuelve un n)
SELECT N_ARTICULO FROM ARTICULO
WHERE NUM_STOCK = 9 AND CANTIDAD = (SELECT MAX(UNIDADES) FROM ARTICULO
WHERE NUM_STOCK = 9 )

4
Los campos y las tablas se ponen separados por comas
5
Para desactivar los comodines de LIKE y MATCHES, poner delante del comodn una \ (?)
Ejemplo: (Selecciona todos los registros que tengan N_ARTICULO igual a 1011) (En este ejemplo se puede conseguir lo
mismo poniendo SELECT MAX(PRECI O_TOTAL)... en vez de ALL (SELECT PRECI O_TOTAL ...) y poner = en vez de >.)
SELECT N_ARTICULO FROM ARTICULO
WHERE PRECIO_TOTAL > ALL (SELECT PRECIO_TOTAL FROM ARTICULO
WHERE N_ARTICULO = 1011)
Poniendo IN en vez de > , la condicin se cumple cuando precio total coincida con una lista de valores.
ALL: La condicin debe cumplirse en todos los registros seleccionados.
SOME/ANY: La condicin debe cumplirse por lo menos en un registro.
3.2. USAR EXI STS CON UNA SELECT DENTRO DE UNA CONDI CI ON:
Devuelve verdadero cuando hay algn registro que cumpla la condicin puesta en la SELECT.
Ejemplo:
SELECT A.nombre FROM proveedores A
WHERE EXISTS (SELECT * FROM pedidos B
WHERE B.P# = 'P2' AND A.S# = B.S#)
4. AGRUPAR I NFORMACI ON CON GROUP BY
1) No puede tener columnas que no hayan sido puestas al comienzo de la SELECT.
2) Se puede poner un n para referirse a los campos (orden en que estn colocados en memoria).
Ejemplo: SELECT NMAT,NOMBRE,CURSO,DIRECCION,GRUPO FROM ALUMNOS
GROUP BY 3,5 (Es lo mismo que poner CURSO,GRUPO)
5. PONER CONDI CI ONES CON HAVI NG
Sirve para poner condiciones a los grupos (acepta o rechaza grupos de filas)
Se pueden poner campos que no estn dentro de esos grupos.
6. ORDENAR CAMPOS CON ORDER BY
1) N mximo de campos que pueden ordenarse: 8 campos.
2) Longitud mxima entre todos los campos a ordenar: 120 bytes.
3) Igual que en GROUP BY se pueden poner nmeros enteros en vez de los nombres de las columnas.
7. CREAR UNA TABLA TEMPORAL CON I NTO TEMP
Se crea una tabla temporal con los campos y registros que han sido seleccionados en la SELECT.
8. UNI R DOS SELECT (CON UNI ON & I NTERSECT, MI NUS)
UNION (operador ): Da los registros que salen en la 1 select + los registros que salen en la 2 select. No hay registros repetidos.
UNION ALL (operador ): Da los registros que salen en la 1 select + los registros que salen en la 2 select. Puede haber
registros repetidos.
INTERSECT (operador ): Da los registros que estn a la vez en la 1 y en la 2 select
MINUS (operador -): Registros que estn en la 1 select y no estn en la 2
Condiciones:
N de columnas de las dos SELECT debe ser igual. Cada columna debe ser del mismo tipo y longitud.
ORDER BY solo puede estar en la ltima SELECT. Se deben usar los ns en vez de los nombres de columnas
UNION no saca los repetidos, para que los saque, usar UNION ALL
Para INTERSECT ocurre lo mismo que para UNION
9. SABER COMO SE LLAMAN LAS TABLAS (ORACLE 7.0)
SELECT * FROM TAB
Ejemplo:
SELECT * FROM TAB

TNAME TABTYPE CLUSTERID
------------------------------ ------- ---------
PRUEBA TABLE
REFERENCIA TABLE
TABLA_NULOS TABLE

10. SABER COMO SE LLAMAN LOS CAMPOS (ORACLE 7.0)
SELECT * FROM COL
WHERE TNAME = '<nombre de la tabla en maysculas>'
Ejemplo:
SELECT * FROM COL WHERE TNAME = 'REFERENCIA';

TNAME COLNO CNAME COLTYPE WIDTH SCALE PRECISION NULLS DEFAULTVAL
------------- ----- -------------- -------- ----- ----- --------- ----------- ----------
REFERENCIA 1 CLAVE_EXT CHAR 2 NOT NULL
REFERENCIA 2 NOMBRE VARCHAR2 20 NOT NULL
REFERENCIA 3 V_DEFECTO VARCHAR2 20 NOT NULL 'tao'
REFERENCIA 4 COD VARCHAR2 10 NOT NULL '*.*'

Otros ejemplos (los dos primeros hacen lo mismo):
SELECT CODIGO, (PRECIO * 1.16) "PRECIO CON IVA" FROM ARTICULOS;
SELECT CODIGO, (PRECIO * 1.16) AS "PRECIO CON IVA" FROM ARTICULOS;
select a.fld2 codigo from ah053 a
where a.fld1 = (select empresa_usuario from parametros_comunica) and
a.fld21 <> (select tipo_proveedor from parametros_comunica);
SELECT DESCRIPCION FROM ALMACENES
WHERE COD_DELEGACION IN (SELECT FLD2 cod_deleg FROM AH038 deleg
WHERE FLD1 = (SELECT EMPRESA_USUARIO FROM PARAMETROS_COMUNICA)
AND FLD10 = 0 );

Ejemplos con UNION:
(Se usa el || para juntar los datos de 3 campos)
SELECT (FLD7 || ' ' || FLD5 || ' ' || FLD6) "APELLIDOS Y NOMBRE" FROM AH032
WHERE FLD3 = 'F'
UNION
SELECT (FLD5) FROM AH032
WHERE FLD3 = 'J'



Una SELECT gigante [combina varias tablas y usa un UNION]
SELECT &&LOGIN COD_USUARIO, AL.TIPO_MOV, AL.FECHA_MOV, AL.USUARIO,
DG.FLD4 "DELEGACION",
AM.DESCRIPCION,
AR.COD_ARTICULO, AR.TIPO_ARTICULO,
AL.CANTIDAD,
PRV.FLD7 || ' ' || PRV.FLD5 || ' ' || PRV.FLD6 "NOMBRE_PROVEEDOR",
MO.DESCRIPCION
FROM ALMACEN AL,
ALMACENES AM,
ARTICULOS AR,
AH038 DG,
AH053 PR,
AH032 PRV,
MOTIVOS_MOV MO
WHERE
(DG.FLD1 = (SELECT EMPRESA_USUARIO
FROM PARAMETROS_COMUNICA) AND DG.FLD10 = 0) AND
(AL.COD_DELEGACION = DG.FLD2) AND
(AL.COD_ALMACEN = AM.COD_ALMACEN) AND
(AL.COD_ARTICULO = AR.COD_ARTICULO) AND
(AL.COD_PROVEEDOR = PR.FLD2) AND
(PR.FLD1 = PRV.FLD1) AND
(PR.FLD2 = PRV.FLD2) AND
(PR.FLD1 = (SELECT EMPRESA_USUARIO FROM PARAMETROS_COMUNICA)) AND
(PR.FLD21 <> (SELECT EMPRESA_USUARIO FROM PARAMETROS_COMUNICA)) AND
(PRV.FLD3 = 'F') AND
(AL.COD_MOTIVO_MOV = MO.COD_MOTIVO_MOV)
UNION
SELECT &&LOGIN COD_USUARIO, AL.TIPO_MOV, AL.FECHA_MOV, AL.USUARIO,
DG.FLD4 "DELEGACION",
AM.DESCRIPCION,
AR.COD_ARTICULO, AR.TIPO_ARTICULO,
AL.CANTIDAD,
PRV.FLD5 "NOMBRE_PROVEEDOR",
MO.DESCRIPCION
FROM ALMACEN AL,
ALMACENES AM,
ARTICULOS AR,
AH038 DG,
AH053 PR,
AH032 PRV,
MOTIVOS_MOV MO
WHERE
(DG.FLD1 = (SELECT EMPRESA_USUARIO
FROM PARAMETROS_COMUNICA) AND DG.FLD10 = 0) AND
(AL.COD_DELEGACION = DG.FLD2) AND
(AL.COD_ALMACEN = AM.COD_ALMACEN) AND
(AL.COD_ARTICULO = AR.COD_ARTICULO) AND
(AL.COD_PROVEEDOR = PR.FLD2) AND
(PR.FLD1 = PRV.FLD1) AND
(PR.FLD2 = PRV.FLD2) AND
(PR.FLD1 = (SELECT EMPRESA_USUARIO FROM PARAMETROS_COMUNICA)) AND
(PR.FLD21 <> (SELECT EMPRESA_USUARIO FROM PARAMETROS_COMUNICA)) AND
(PRV.FLD3 = 'J') AND
(AL.COD_MOTIVO_MOV = MO.COD_MOTIVO_MOV)
;


Al ejecutar la select, sale:
Enter value for LOGIN: _ (se mete una cadena a mano y se pulsa ENTER)

Una SELECT gigante [combina varias tablas y usa un UNION]
SELECT 'F' TIPO_PER, COUNT(*) AS CUANTOS
FROM ALMACEN AL, ALMACENES AM, ARTICULOS AR, AH038 DG,
AH053 PR, AH032 PRV, MOTIVOS_MOV MO
WHERE
(DG.FLD1 = (SELECT EMPRESA_USUARIO FROM PARAMETROS_COMUNICA)) AND
(DG.FLD10 = 0) AND
(AL.COD_DELEGACION = DG.FLD2) AND
(AL.COD_ALMACEN = AM.COD_ALMACEN) AND
(AL.COD_ARTICULO = AR.COD_ARTICULO) AND
(AL.COD_PROVEEDOR = PR.FLD2) AND
(PR.FLD1 = PRV.FLD1) AND
(PR.FLD2 = PRV.FLD2) AND
(PR.FLD1 = (SELECT EMPRESA_USUARIO FROM PARAMETROS_COMUNICA)) AND
(PR.FLD21 <> (SELECT EMPRESA_USUARIO FROM PARAMETROS_COMUNICA)) AND
(AL.COD_MOTIVO_MOV = MO.COD_MOTIVO_MOV) AND
(PRV.FLD3 = 'F')
UNION
SELECT 'J' TIPO_PER, COUNT(*) AS CUANTOS
FROM ALMACEN AL, ALMACENES AM, ARTICULOS AR, AH038 DG,
AH053 PR, AH032 PRV, MOTIVOS_MOV MO
WHERE
(DG.FLD1 = (SELECT EMPRESA_USUARIO FROM PARAMETROS_COMUNICA)) AND
(DG.FLD10 = 0) AND
(AL.COD_DELEGACION = DG.FLD2) AND
(AL.COD_ALMACEN = AM.COD_ALMACEN) AND
(AL.COD_ARTICULO = AR.COD_ARTICULO) AND
(AL.COD_PROVEEDOR = PR.FLD2) AND
(PR.FLD1 = PRV.FLD1) AND
(PR.FLD2 = PRV.FLD2) AND
(PR.FLD1 = (SELECT EMPRESA_USUARIO FROM PARAMETROS_COMUNICA)) AND
(PR.FLD21 <> (SELECT EMPRESA_USUARIO FROM PARAMETROS_COMUNICA)) AND
(AL.COD_MOTIVO_MOV = MO.COD_MOTIVO_MOV) AND
(PRV.FLD3 = 'J') ;

Sale una cosa parecida a esto:
T CUANTOS
- ---------
F 31
J 0

(Se usan SELECTs dentro de los WHERE)
Se puede usar = y <> porque la tabla PARAMETROS_COMUNICA slo tiene un registro
SELECT 'F: '||(b.FLD7 || ' ' || b.FLD5 || ' ' || b.FLD6) MIX
FROM AH053 a, AH032 b
WHERE b.FLD3 = 'F' AND
a.fld1 = b.fld1 AND
a.fld2 = b.fld2 AND
a.fld1 = (select empresa_usuario from parametros_comunica) and
a.fld21 <> (select tipo_proveedor from parametros_comunica)
UNION
SELECT 'J: '||b.FLD5 FROM AH053 a, AH032 b
WHERE b.FLD3 = 'J' AND
a.fld1 = b.fld1 AND
a.fld2 = b.fld2 AND
a.fld1 = (select empresa_usuario from parametros_comunica) and
a.fld21 <> (select tipo_proveedor from parametros_comunica)
ORDER BY MIX;

(Otro ejemplo. Usa dos veces la misma tabla)
SELECT A.* , B.FECHA_INFORME, B.ENTRADA_CONFORME, B.RESPONSABLE_CONFORME,
B.ENTRADA_NO, B.RESPONSABLE_NO
FORM INFORME_INSPECCION A, INFORME_INSPECCION_B
WHERE A.NUM_INFORME = B.NUM_INFORME AND
A.NUM_INFORME = 1 AND B.NUM_INFORME = 2;

(Otro ejemplo. Comprueba si lo que devuelve la SELECT anidada esun 0)
select cod_albaran, cod_proveedor from albaranes_prov_cab_hist
where cod_albaran = 'dedede' and cod_proveedor = 'PERSONA4' AND
(select count(*) from albaranes_prov_lin_hist
where cod_albaran = 'dedede' and cod_proveedor = 'PERSONA4') = 0;

- U -
UPDATESET[WHERE]: Reemplaza los valores de los registros.
Formato 1: UPDATE <nombre tabla> SET (<campos>)=(<valores>) [WHERE <condicin>]
Formato 2: UPDATE <nombre tabla> SET (<campos>)=(<valores>) [WHERE <aqu va una SELECT>]
Si no se le ponen condiciones reemplaza todos los registros.
Ejemplos:
UPDATE productos
SET existencias = existencias - 10 + 4
WHERE id_fab = 'QAS' AND id_producto = 'XK47'
UPDATE empleados
SET coment = 'NO COMMENT' Cambian todos
UPDATE empleados
SET sueldo = sueldo - (sueldo * 0.10)
WHERE nombre = 'PEPE'
UPDATE empleados
SET sueldo = 100000
WHERE sueldo IS NULL
UPDATE trabajadores
SET sueldo = sueldo + 1000
WHERE cod_t IN (SELECT cod_t FROM oficinas
WHERE ciudad = 'MADRID')
- (otros) -
/* */: Sirve para crear comentarios. El comentario puede ocupar varias lneas. Formato: /* (comentario) */
Ejemplo:
/***
*** COMANDO SQL USADO PARA ELIMINAR PROVEEDORES
***/
-- : Sirve para crear comentarios. Formato: -- <comentario>
Ejemplo:
-- Selecciona los registros en que EDAD < 25 y los ordena por apellidos


D) FUNCIONES
D.1) FUNCIONES NUMERICAS
ABS( ): Devuelve el valor absoluto de un n . Formato: ABS(<n>)
CEIL( ): Devuelve un entero >= n . Formato: CEIL(<n>)
FLOOR( ): Devuelve un entero <= n . Formato: FLOOR(<n>)
MOD( ): Devuelve el resto de la divisin n1 / n2. Formato: MOD(<n1>,<n2>)
POWER( ): Devuelve n1
n2
. Formato: POWER(<n1>,<n2>)
ROUND( ): Devuelve el n n redondeado con m decimales. Formato: ROUND(<n>, [<n decimales>])
SIGN( ): Devuelve el signo de n (n < 0 -1; n = 0 0; n > 0 1). Formato: SIGN(<n>)
TRUNC( ): Devuelve el n n con m decimales (por defecto, m=0). Si m es negativo trunca m dgitos a la izquierda del punto
decimal. Formato: TRUNC(<n>,<n decimales>)
Ejemplos:
SELECT TRUNC(4567, -3), TRUNC(4567.89, 1) FROM DUAL; devuelve 4000 y 4567.8
SELECT TRUNC(4567.555), TRUNC(1, -2) FROM DUAL; devuelve 4567 y 0
SQRT( ): Devuelve la raz cuadrada de un n . Formato: SQRT(<n>)
D.2) FUNCIONES DE GRUPOS
AVG( ): Devuelve la media. Formato: AVG(<campo numrico/lista de valores>)
COUNT( ): Devuelve el n de valores no nulos en los registros recuperados. Formato: COUNT({<campo>| *})
DISTINCT( ): Contar los distintos. [no existe en el SQL de ACCESS ]. Formato: DISTINCT({<campo>| *})
MAX( ): Devuelve el valor mximo. Formato: MAX(<campo>)
MIN( ): Devuelve el valor mnimo. Formato: MIN(<campo>)
SUM( ): Devuelve la suma de todos los registros del grupo. Formato: SUM(<campo>)
D.3) FUNCIONES DE CONVERSION DE TIPOS DE DATOS
TO_CHAR( ): Convierte un n o una fecha en una cadena. Formato: TO_CHAR(<n>).

YYYY Ao (4 cifras) HH24 Hora (reloj 24 horas)
YY Ao (2 cifras) HH Hora (reloj 12 horas)
MM Mes (1-12) MI Minuto
D Dia semana (n) [1 = lunes] SS Segundo
DD Dia (1-31)
DDD N dia del ao (1-366)
Q N trimestre (1-4)


Ejemplo: TO_CHAR(1000)

TO_DATE( ): Convierte una cadena en una fecha. Formato: TO_DATE(<cadena>). Ejemplo: TO_DATE('01-DEC-97')
TO_NUMBER( ): Convierte una cadena en un n. Formato: TO_NUMBER(<cadena>). Ejemplo: TO_NUMBER('1000')
D.4) FUNCIONES DE CADENAS
INITCAP( ): El primer carcter en maysculas. Formato: INITCAP(<cadena>)
INSTR( ): Comprueba si una cadena est dentro de otra. Se busca la ocurrencia n n empezando desde <inicio>.
Formato: INSTR("<cadena donde se busca>","<cadena buscada>",<inicio>,<n ocurrencia>)
LENGTH( ): Longitud de una cadena. Formato: LENGTH(<cadena>)
LOWER( ): Pasa la cadena a minsculas. Formato: LOWER(<cadena>)
LPAD( ): Rellena una columna por la izquierda con el carcter indicado.
(a) Si n > longitud del campo: los espacios que sobran se rellenan por la izquierda con el carcter indicado.
(b) Si n = longitud del campo: sin cambios
(c) Si n < longitud del campo: devuelve los primeros caracteres del campo
Formato: LPAD(<campo>, <n>,<carcter>)
Ejemplos:
SELECT LPAD('S1', 10 '_') FROM DUAL [Esta select devuelve la cadena '________S1' ]
SELECT LPAD('1234567890', 2, '_') FROM DUAL [Esta select devuelve la cadena '12' ]
SELECT LPAD(1000, 7, '*') FROM DUAL [Esta select devuelve la cadena '***1000' ]
Ejemplo:select lpad(cod_usuario, 2, '_') from list_movimientos;
LTRIM( ): Elimina los espacios de la . Formato: LTRIM(<campo carcter>)
REPLACE( ): Hace 'buscar <cad1> y cambiarla por <cad2>' dentro de <cadena>.
Formato: REPLACE("<cadena>","<cad1>","<cad2>")
Ejemplo: SELECT REPLACE('SCOTT','S','BOY') FROM DUAL
RPAD( ): Aumenta el tamao de una columna. Los espacios que sobran se rellenan por la derecha.
(a) Si n > longitud del campo: los espacios que sobran se rellenan por la derecha con el carcter indicado.
(b) Si n = longitud del campo: sin cambios
(c) Si n < longitud del campo: devuelve los primeros caracteres del campo
Formato: RPAD(<columna>, <ancho del campo>,<carcter>)
Ejemplos:
SELECT RPAD('S1', 10 '_') FROM DUAL [Esta select devuelve la cadena ' S1________' ]
SELECT RPAD('S1', 10 '_-') FROM DUAL [Esta select devuelve la cadena ' S1_-_-_-_-' ]
SELECT RPAD('S1', 12, '_- ') FROM DUAL [Esta select devuelve la cadena ' S1_- _- _- _' ]
SELECT RPAD('1234567890', 2, '_') FROM DUAL [Esta select devuelve la cadena '12' ]
RTRIM( ): Elimina los espacios de la . Formato: RTRIM(<campo carcter>)
SOUNDEX( ): Busca palabras que suenen igual (en ingls). Formato: SOUNDEX("<cadena>")
Ejemplo:
SELECT apellidos FROM empleados
WHERE SOUNDEX(apellidos) = SOUNDEX("SMYTHE")
SUBSTR( ): Devuelve un pedazo de una cadena. Formato: SUBSTR(<cadena>,<inicio>,<n caracteres>)
TRIM( ): Elimina los espacios de la y (es como hacer un LTRIM(RTRIM()) ). Formato: TRIM(<campo carcter>)
Ejemplo:
SELECT '==>' || TRIM(SUBSTR(DESCRIPCION, 1, 40)) || '<==' "Sin espacios"
FROM almacenes
WHERE CODIGO LIKE 'A_B_'

Sin espacios
--------------------------------------------------
==>Almacn de la calle Bravo Murillo<==
==>Almacn de la calle Sainz de Baranda<==

UPPER( ): Pasa la cadena a maysculas. Formato: UPPER(<cadena>)
D.4) FUNCIONES DE FECHA
ADD_MONTHS( ): Suma n meses a una fecha. Formato: ADD_MONTHS(<fecha>,<n meses>)
DAY( ): Da del mes. Formato: DAY(<fecha>)
LAST_DAY( ): N de das del mes. Formato: LAST_DAY(<fecha>).
Ejemplo: SELECT LAST_DAY(SYSDATE) FROM DUAL
MONTH( ): Mes de la fecha. Formato: MONTH(<fecha>)
MONTHS_BETWEEN( ): Devuelve n de meses que hay entre dos fechas. (fecha2 - fecha1)
Formato: MONTHS_BETWEEN(<una fecha>,<otra fecha>)
SYSDATE: Fecha del sistema. Formato: SYSDATE. Ejemplo: SELECT SYSDATE FROM DUAL
WEEKDAY( ): Da de la semana (0domingo, 6sbado)
YEAR( ): Ao de la fecha. Formato: YEAR(<fecha>)

E) SQL PLUS
E.1) PRINCIPALES COMANDOS
(n): Muestra la linea n del buffer. El n debe ser mayor de 0.
Ejemplo (primero se ejecuta este comando):
SQL> SELECT N_ARTICULO FROM ARTICULO
WHERE PRECIO_TOTAL > ALL (SELECT PRECIO_TOTAL FROM ARTICULO
WHERE N_ARTICULO = 1011);
SQL> 1
1* SELECT N_ARTICULO FROM ARTICULO
SQL> 2
2* WHERE PRECIO_TOTAL > ALL (SELECT PRECIO_TOTAL FROM ARTICULO
SQL> 5
SP2-0226: Invalid line number [da error por que el comando tiene menos de 5 lneas]

DESC: Ver estructura de una tabla. Formato: DESC <tabla>
Ejemplos:
DESC ALMACEN;
(Esto es lo que SQL PLUS saca por pantalla)
Name Null? Type
----------------------------------------------------- -------- ---------------
COD_MOTIVO_MOV VARCHAR2(2)
COD_ALMACEN NOT NULL VARCHAR2(10)
COD_DELEGACION NOT NULL VARCHAR2(3)
COD_ARTICULO NOT NULL VARCHAR2(10)
FECHA_MOV DATE
COD_PROVEEDOR VARCHAR2(15)
USUARIO VARCHAR2(20)
CANTIDAD NUMBER
TIPO_MOV VARCHAR2(1)

DESCRIBE: Ver estructura de una tabla. Formato: DESCRIBE <tabla>
Ejemplos:
DESCRIBE COL;
(Esto es lo que SQL PLUS saca por pantalla)
Name Null? Type
----------------------------------------------------- -------- ------------------
TNAME NOT NULL VARCHAR2(30)
COLNO NOT NULL NUMBER
CNAME NOT NULL VARCHAR2(30)
COLTYPE VARCHAR2(106)
WIDTH NOT NULL NUMBER
SCALE NUMBER
PRECISION NUMBER
NULLS VARCHAR2(19)
DEFAULTVAL LONG
CHARACTER_SET_NAME VARCHAR2(44)

DESCRIBE TAB;
(Esto es lo que SQL PLUS saca por pantalla)
Name Null? Type
----------------------------------------------------- -------- ------------------
TNAME NOT NULL VARCHAR2(30)
TABTYPE VARCHAR2(7)
CLUSTERID NUMBER

DEFINE_EDITOR: Se indica a SQL PLUS el editor de textos que se va a usar. Formato: define_editor = <editor de texto>
Ejemplos:
define_editor = vi Si ests usando Oracle de UNIX
define_editor = notepad Si ests usando Oracle para Windows
ED | EDIT: Editar fichero .SQL indicado. El editor de textos usado se indica con define_editor. Si no se indica fichero, SQL
PLUS usa un fichero temporal (AFIEDT.BUF)
Formato: EDIT [<fichero>]
EXIT: Sale de SQL PLUS
GET: Lleva al buffer el fichero .SQL indicado. Formato: GET <fichero>
HELP: Muestra la ayuda (si est disponible).
LIST: Sirve para ver ultimo comando metido, pero no lo ejecuta. Formato: LIST
QUIT: Sale de SQL PLUS
RUN: Ejecuta el ltimo comando metido. (hay que usarlo cuando el comando no acaba en ; )
Ejemplo:
SQL> SELECT N_ARTICULO FROM ARTICULO
WHERE PRECIO_TOTAL > ALL (SELECT PRECIO_TOTAL FROM ARTICULO
WHERE N_ARTICULO = 1011)
SQL> run
SAVE: Grabar fichero. La opcin REPLACE sirve para sobreescribir el fichero.
Formato: SAVE <nombre> [REPLACE]
Ejemplo: SAVE C:\TEMP.TXT REPLACE
SET SQLPROMPT: Cambia el prompt usado por SQL PLUS. Formato: SET SQLPROMPT <cadena>
Ejemplo:
SET SQLPROMPT SQL>> [el prompt pasa a ser "SQL>>"]
START: Ejecuta un fichero de texto con ordenes SQL. Si la extensin del fichero no es .SQL hay que indicarlo.
Formato: START <fichero> <args>
<args> son valores para variables usadas en el fichero SQL
Ejemplos:
START prg001;
START prgdept 10;
SPOOL: Guarda el resultado de una SELECT en un fichero o en la impresora. Para terminar se usa SPOOL OFF (con ficheros) o
SPOOL OUT (con impresoras)
Formato 1: SPOOL <fichero>
Formato 2: SPOOL ON
E.2) GENERACION DE INFORMES
BREAK: Visualiza rupturas de control activas
BREAK ON: Sirve para organizar las filas recuperadas en grupos.
Formato: BREAK ON <columna/ROW/PAGE/REPORT> <accin a tomar>
Cosas que se pueden poner despus de ON:
<columnas>: Crea un nuevo grupo cada vez que cambia el valor de esa columna. Se puede unar varias columnas.
Ejemplo: ON ciudad ON codpostal 1 agrupa por ciudad y despus por codigo postal
ROW: Crea un grupo para cada fila recuperada.
PAGE: Crea una ruptura por pgina
REPORT: Crea un grupo al final del informa
Acciones a tomas
SKIP: Salta una lnea
SKIP <n>: Salta n lneas
PAGE: Salto de pgina
BTITLE: Sirve para configurar el pie de pgina del informe. El texto mostrado puede ser una cadena de caracteres o una variable
de tipo caracter
Opciones:
ON/OFF: Activa/desactiva el pie de pgina
COL<n>: Texto colocado en la columna indicada
SKIP <n>: Salta n lneas antes de imprimir el texto
LEFT: Texto alineado a la izquierda
CENTER: Texto centrado
RIGHT: Texto alineado a la derecha
Ejemplo:
BTITLE CENTER 'Confidencial';
CLEAR BREAKS: Elimina cualquier tipo de ruptura activa.
COLUMN: Se modifica la visualizacin de una columna. Esto no cambia los datos, es slo una mscara.
Formato: COLUMN <columna>
FORMAT <formato>
HEADING '<cabecera>'
{WRAPPED | WORD_WRAPPED | TRUNCATE}
NULL '<texto>'
LIKE <columna>
{PRINT | NOPRINT}
ON / OFF
NEWLINE
Opciones:
FORMAT: Sirve para formatear columnas.
Caracteres especiales:
* A<n>: Variable alfanumrica de n posiciones
* 9: Nmeros. No rellena con ceros a la izquierda
* 0: Nmeros. Rellena con ceros a la izquierda.
* $: Indica la posicion del signo del $
* . : Inserta el punto decimal
* , : Inserta el separador de miles.
* B : Cambia los blancos a la izquierda de la columna por ceros.
* MI: Usa el - para indicar que la columna tiene ns negativos
* PR: Usa < y > para indicar que la columna tiene ns negativos
HEADING: Cabecera de la columna. Va entre comillas simples. El pipeline sirve para dividir la cabecera en varias lineas.
Ej: 'SALARIO | MENSUAL' en una linea aparece 'SALARIO' y debajo aparece 'MENSUAL'
WRAPPED | WORD_WRAPPED | TRUNCATE: Como se alinea la columna si el valor contenido es mayor que el
especificado en formato.
NULL : Si en la columna existen valores nulos los reemplaza por el texto indicado
LIKE: La columna tiene el mismo formato que la columna indicada
PRINT | NOPRINT: Especifica si la columna se imprime o no. Se utiliza cuando una columna es necesaria en una select (ej
GROUP BY) pero no desea visualizarse.
ON / OFF: Activa/desactiva el formateo de una columna temporalmente.
NEWLINE: Genera una linea en blanco antes de empezar a escribir el contenido de la columna
Ejemplo:
COLUMN ENAME HEADING 'NOMBRE|EMPLEADO' FORMAT A8
COLUMN DEPTNO HEADING 'DEPARTAMENTO' FORMAT 99;
COLUMN SAL
HEADING 'SALARIO|MENSUAL'
FORMAT $9,999.99;
COMPUTE: Ver todos los computes activos
COMPUTE ... OF ... ON: Saca el mnimo, mximo, media,... de los registros que forman un grupo
Formato: COMPUTE <funcin> OF <campo> ON <grupo (un grupo creado con BREAK)>
Funciones:
MAX: Mximo
MIN: Mnimo
AVG: Media
SUM: Suma
STD: Desviacin estandar
VAR: Varianza
COUNT: n de filas por grupo
Ejemplo: COMPUTE MAX OF salario ON deptno;
CLEAR COMPUTES: Eliminar todos los computes activos
SET LINESIZE: N caracteres por lnea. Por defecto es 80, el mximo es 999
Formato: SET LINESIZE <n>
SET PAGESIZE: N lneas por pgina, incluyendo ttulos y marcas de pgina. Por defecto es 25
SET HEADING ON/OFF: Activa/desactiva utilizacin de cabeceras de columna. Por defecto est a ON
SET VARIABLE "valor": Mete un valor en la variable indicada. Deben corresponderse los tipos de datos.
SET NULL "texto": Valor para nulos. Por defecto es cadena vacia.
SET ECHO ON/OFF: Visualizar valores que se estn ejecutando desde dentro de un fichero. Por defecto es OFF
SET FEEDBACK ON/OFF: Devuelve n de registros seleccionados, eliminados,... Por defecto est a ON
SET VERIFY ON/OFF: Indicador del valor antiguo y nuevo de una variable cuando se usa &variable. Por defectoest a ON
SET WRAP ON/OFF: Elimina espacios entre lneas.
SHOW <variable>: Ver valor de la variable indicada
SHOW ALL: Ver valor de todas las variables.
TTITLE: Sirve para configurar el encabezado del informe. El texto mostrado puede ser una cadena de caracteres o una variable de
tipo caracter
Opciones:
ON/OFF: Activa/desactiva el encabezado
COL<n>: Texto colocado en la columna indicada
SKIP <n>: Salta n lneas antes de imprimir el texto
LEFT: Texto alineado a la izquierda
CENTER: Texto centrado
RIGHT: Texto alineado a la derecha
Ejemplo:
TTITLE LEFT 'Dic. 98' CENTER 'Informe de ventas';
E.3) VARIABLES
Si se pone &<nombre>, cuando se mete dentro de una SQL, el SQL PLUS pedir el valor de esa variable.
Si se pone &&<nombre>, el valor de la variable no se pierde. Sirve para usar el mismo valor en varias ordenes SQL
A los ficheros .SQL se les puede pasar directamente el valor de las variables. Se deben poner despus de START <nombre
fichero> y separadas por espacios.
Ejemplo:
SELECT * FROM dept
WHERE deptno = &numdept;

Al ejecutarlo aparece ...
Enter value for numdept: _ se mete un n, cadena,

NOTA: Si se quiere meter una cadena hay que incluir las ' ' (Ej: 'Paco el Loco') o poner la variable entre ' '

Ejemplo:
SELECT a.fld2 codigo FROM ah053 a, ah032 b
WHERE a.fld2 = b.fld2 and
a.fld1 = (select empresa_usuario from parametros_comunica) and
a.fld21 <> (select tipo_proveedor from parametros_comunica) and
(
(b.fld3 = 'J' and b.fld5 = '&Nombre' ) or
(b.fld3 = 'F' and b.fld7||' '||b.fld5||' '||b.fld6 = '&Nombre' )
);

Al ejecutarlo aparece 2 veces "Enter value for nombre"
Despues de meter el valor sale algo parecido a esto:
old 6: (b.fld3 = 'J' and b.fld5 = '&Nombre' ) or
new 6: (b.fld3 = 'J' and b.fld5 = 'Delegado 4' ) or


F) OPERADORES SQL
:= : Operador de asignacin. Ejemplo: rec_read := rec_read + 1
< , <= , >, >= , = , < > , != y ^= : Se usan para comparar ns, cadenas, fechas, (!=, <> y ^= hacen lo mismo (distinto))
Ejemplos (el 2 y 3 hacen lo mismo):
SELECT CODIGO, (PRECIO * 1.16) "PRECIO CON IVA" FROM ARTICULOS
WHERE PRECIO >= 15000 AND PRECIO <= 20000;
SELECT CODIGO, (PRECIO * 1.16) "PRECIO CON IVA" FROM ARTICULOS
WHERE PRECIO != 15000
SELECT CODIGO, (PRECIO * 1.16) "PRECIO CON IVA" FROM ARTICULOS
WHERE PRECIO <> 15000
+ - * / : Son los operadores numricos que permite Oracle.
Ejemplos:
SELECT CODIGO, PRECIO, (PRECIO * 0.90) "DESPUES DEL DESCUENTO" FROM ARTICULOS;
SELECT TO_DATE('1/mar/2000') - TO_DATE('1/mar/1999') "DIF FECHAS" FROM DUAL;
(+)= : ??? [lo vi en una select, puede que sirve para hacer los "LEFT JOIN" del Access]
|| : Operador usado para unir cadenas o campos caracter. (son dos pipes seguidos)
Ejemplo:
SELECT NIF, APE1 || ' ' || APE2 || ', ' || NOMBRE AS NOMBRE_COMPLETO
FROM DATOS_PERS;
" " : Se usa en alias de campos (cuando tienen espacios o caracteres que dan problemas)
Ejemplo:
SELECT NIF AS "N de NIF", APE1, APE2, NOMBRE FROM DATOS_PERS;
' ' : Delimitador de cadenas.
Ejemplo:
INSERT INTO CLIENTES (NOMBRE, APELLIDOS) VALUES ('DRACULA', NULL);
ALL (selects anidadas) : Se usa cuando se quiere que el valor de un campo sea mayor, menor, a todos los valores que devuelva
la SELECT.
Formato: <operador> ALL (<una SELECT>)
Nota: El <operador> puede ser > , <, >= , <= y <> [tambin se puede usar = , pero es poco prctico].
Ejemplo:
SELECT DESCRIPCION FROM ARTICULO
WHERE PRECIO_TOTAL > ALL (SELECT PRECIO_TOTAL FROM ARTICULO
WHERE COD_ARTICULO LIKE 'CDR%')
AND, OR, NOT : Operadores lgicos. Si no hay parntesis se ejecutan en este orden: NOT, AND, OR
Ejemplo:
SELECT CODIGO, (PRECIO * 1.16) "PRECIO CON IVA" FROM ARTICULOS
WHERE PRECIO >= 15000 AND PRECIO <= 20000;
BETWEEN: El n / fecha debe estar entre dos valores.
Ejemplo:
SELECT CODIGO, (PRECIO * 1.16) "PRECIO CON IVA" FROM ARTICULOS
WHERE PRECIO BETWEEN 15000 AND 20000;
IN : Se usa para indicar una lista de valores. Pueden ser nmeros, cadenas, fechas, o una SELECT
Se usa principalmente en el comando SELECT y UPDATE
Ejemplos:
(Selecciona los registros que su COD_ALMACEN o su COD_DELEGACION sea '001')
SELECT * FROM ALMACENES WHERE '001' IN (COD_ALMACEN, COD_DELEGACION);

(Selecciona los registros que su COD_ALMACEN sea '001' o '003')
SELECT * FROM ALMACENES WHERE COD_ALMACEN IN ('001', '003');

(El IN se usa con una SELECT para indicar que registros van a borrarse)
DELETE FROM CI071 WHERE FLD4 IN (SELECT FLD4 FROM CI071 WHERE FLD4 NOT LIKE '-%');

(El IN se usa con una SELECT para indicar que registros van a modificarse)
UPDATE trabajadores
SET sueldo = sueldo + 1000
WHERE cod_t NOT IN (SELECT cod_t FROM oficinas
WHERE ciudad = 'MADRID');
LIKE: Se usa con cadenas. Los comodines que pueden usarse son '%' (varios caracteres) y subrayado (un caracter).
Ejemplo:
SELECT DISTINCT APELLIDO FROM CLIENTES WHERE APELLIDO LIKE "M%"
SELECT DISTINCT APELLIDO FROM CLIENTES WHERE APELLIDO NOT LIKE "%Z"



G) ACCEDER A ORACLE CON VISUAL BASIC 6
G.1) CONEXIONES
a) Definir una variable de tipo Connection o ADODB.Connection (lo normal es que sea una variable global) [el ODBC debe
haberse creado antes en el panel de control]
Ejemplo: Public dbOracle As New ADODB.Connection)
b) Configurar conexin [opcional]
Ejemplo:
dbOracle.ConnectionString = "Provider=MSDAORA.1;Password=panel;" & _
"User ID=panel;Data Source=panel;Locale Identifier=3082" '<*>
'<*> Esto puede ser un origen de datos ODBC (creado desde el panel de control)
Public dbOracle As New ADODB.Connection)
c) Abrir conexin.
c.1) Si la propiedad .ConnectionString es una cadena vacia, la conexin debe abrirse con
<objeto connection>.Open "<cadena de conexin>".
c.2) Si la propiedad .ConnectionString no es una cadena vacia, la conexin debe abrirse con
<objeto connection>.Open.
Ejemplos:
dbOracle.Open
dbOracle.Open "Provider=MSDAORA.1;Password=panel;" & _
"User ID=panel;Data Source=panel;Locale Identifier=3082"
d) Acceder a datos usando recordsets (ver G.2)
e) Cerrar la conexion
Ejemplo: dbOracle.Close

Notas: Para saber si la conexin est abierta o no, mira la propiedad State del objeto Connection [o ADODB.Connection]. Si esa
propiedad vale 0, la conexin est cerrada.
Si eso pasa cuando se est intentando leer/grabar en una tabla, aparece el error &H80004005

G.2) RECORDSETS
a) Definir una variable de tipo Recordset o ADODB.Recordset (Ej: Dim recBuscador as New Recordset)
b) Meter comando SQL en una variable de tipo carcter (por ejemplo, una SELECT) [opcional]
c) Abrir el recordset (se puede elegir el tipo de recordset antes de abrirlo o en el momento en que se abre, pero no despus). [por
motivos practicos (velocidad), elegir tipo de bloqueo 'Slo lectura' (adLockReadOnly) y tipo de recordset 'Static'
(adOpenStatic)].
Formato: <recordset>.Open "<comando SQL>", <tipo recordset>, <tipo bloqueo>
Ejemplo:
Dim rec as New ADODB.Recordset
Dim strSQL as String
'------------------------------
'dbOracle es la conexin usada (un objeto Connection)
strSQL = "select * from lista_juegos " & vbCrLf & _
"where tipo = '" & Replace(txtTipo.Text, "'","''") & "'"
rec.Open strSQL, dbOracle, adOpenStatic, adLockReadOnly

G.3) EJECUTAR COMANDOS SQL SIN USAR RECORDSETS
*** Esto ocurre por que se usa el mtodo Execute de las conexiones
a) Meter comando SQL en una variable de tipo carcter (por ejemplo, un INSERT) [opcional]
b) Hacer esto: <objeto connection>.Execute "<comando SQL>"



G.4) TRUCOS
A) DATOS DE TIPO NUMERICO
La forma ms simple de convertir los ns de las textbox (o cualquier otro control) al formato usado por Oracle es:
Str(CDbl(<n>))
La funcin Str( ) convierte un n en una cadena y siempre usa el punto como separador de decimales.
Ejemplo: Str(CDbl(txtTotal.Text))

B) DATOS DE TIPO CARACTER
La forma ms simple es usar la funcin REPLACE del Visual Basic. Se le ordena que busque una comilla simple y la cambie por
dos comillas simples.
Ejemplo: strSQL = strSQL & "'" & Replace(txtNombre.Text,"'","''") & "'"

C) DATOS DE TIPO FECHA
* Una forma ms simple es usar {d 'ao-mes-dia'}. Tiene una pega: No funciona si la usas en SQL-PLUS.
Ejemplo:
Dim strTemp As Strng
'----------------------------------------
'coge la fecha del dtPicker y la da un formato
strSQL = "SELECT * FROM PEDIDOS" & vbCrLf & " WHERE COD_PEDIDO IS NOT NULL "
If (Not IsNull(dtpFechaInicio.Value)) Then
strTemp = Format(dtpFechaInicio.Value,"'yyyy-mm-dd'")
strSQL = strSQL & "AND " & vbCrLf & _
" FECHA >= {d " & strTemp & "}"
End If
If (Not IsNull(dtpFechaFin.Value)) Then
strTemp = Format(dtpFechaFin.Value,"'yyyy-mm-dd'")
strSQL = strSQL & "AND " & vbCrLf & _
" FECHA <= {d " & strTemp & "}"
End If

'Esto puede quedar asi:
' SELECT * FROM PEDIDOS
' WHERE COD_PEDIDO IS NOT NULL AND
' FECHA >= {d '1999-07-31'} AND
' FECHA <= {d '2000-01-02')
* Otra opcin es usar la funcin TO_DATE( ) . La fecha debe pasarse en formato ao-mes-dia para evitar problemas
("yyyy/mm/dd" o "yyyy-mm-dd")
Ejemplo:
Dim strTemp As Strng
'----------------------------------------
'coge la fecha del dtPicker y la da un formato
strSQL = "SELECT * FROM PEDIDOS" & vbCrLf & " WHERE COD_PEDIDO IS NOT NULL "
If (Not IsNull(dtpFechaInicio.Value)) Then
strTemp = Format(dtpFechaInicio.Value,"'yyyy-mm-dd'")
strSQL = strSQL & "AND " & vbcrlf & _
" FECHA >= TO_DATE(" & strTemp & ",'yyyy-mm-dd')"
End If
If (Not IsNull(dtpFechaFin.Value)) Then
strTemp = Format(dtpFechaFin.Value,"'yyyy-mm-dd'")
strSQL = strSQL & "AND " & vbcrlf & _
" FECHA <= TO_DATE(" & strTemp & ",'yyyy-mm-dd')"
End If

'Esto puede quedar asi:
' SELECT * FROM PEDIDOS
' WHERE COD_PEDIDO IS NOT NULL AND
' FECHA >= TO_DATE('1999-07-31', 'yyyy-mm-dd') AND
' FECHA <= TO_DATE('2000-01-02', 'yyyy-mm-dd')

* Otra opcin es usar la funcin TO_CHAR( ) . La fecha debe pasarse en formato ao-mes-dia. Se aprovecha que las cadenas se
comparan por su cdigo ASCII. (Ej: "2" > "0")
Ejemplo:
Dim strTemp As Strng
'----------------------------------------
'coge la fecha del dtPicker y la da un formato
strSQL = "SELECT * FROM PEDIDOS" & vbCrLf & " WHERE COD_PEDIDO IS NOT NULL "
If (Not IsNull(dtpFechaInicio.Value)) Then
strTemp = Format(dtpFechaInicio.Value,"'yyyy-mm-dd'")
strSQL = strSQL & "AND " & vbcrlf & _
" TO_CHAR(FECHA, 'yyyy-mm-dd') >= " & strTemp
End If
If (Not IsNull(dtpFechaFin.Value)) Then
strTemp = Format(dtpFechaFin.Value,"'yyyy-mm-dd'")
strSQL = strSQL & "AND " & vbcrlf & _
" TO_CHAR(FECHA, 'yyyy-mm-dd') <= " & strTemp
End If

'Esto puede quedar asi:
' SELECT * FROM PEDIDOS
' WHERE COD_PEDIDO IS NOT NULL AND
' TO_CHAR(FECHA, 'yyyy-mm-dd') >= '1999-07-31' AND
' TO_CHAR(FECHA, 'yyyy-mm-dd') <= '2000-01-02'

S-ar putea să vă placă și