SQL DE ORACLE - eGruposelistas.egrupos.net/lista/trapos/ficheros/5/verFichero/1/… · Web viewSQL...

26
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 máx: 255 caracteres Si se quiere meter una cadena más grande que el campo ERROR VARCHAR2(n) Cadenas de longitud variable. Tam máx: 2000 caracteres. LONG Son los campos memo. Tam máx: 2 Gb (+ de 2000 millones de caracteres). Tienen muchas restricciones (no se pueden meter dentro de condiciones en la SELECT,…) NUMBER Cualquier tipo de número. Formato: NUMBER [(<precisión>[, <escala>])] <precisión>: nº de cifras que tiene el nº, incluyendo los decimales. (valores permitidos son entre 1 y 38). Por defecto es el máximo (38). Si se incluye este parámetro, 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 'año-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 configuación regional de Windows). Forma de guardar n os en campos numéricos Valor Opciones elegidas Cómo 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 (sólo para ORACLE): ROWID: Almacena la dirección física de cada tupla de la base de datos 1 Si el (nº de dígitos de la parte entera) > (precisión - escala), se produce un error de exceso de precisión. 2 Si escala es < 0 , se redondean las ultimas cifras de la parte entera

Transcript of SQL DE ORACLE - eGruposelistas.egrupos.net/lista/trapos/ficheros/5/verFichero/1/… · Web viewSQL...

Page 1: SQL DE ORACLE - eGruposelistas.egrupos.net/lista/trapos/ficheros/5/verFichero/1/… · Web viewSQL (ORACLE) (En algunos SQL las ordenes acaban en ; . En otros no) A) TIPOS DE DATOS

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

A) TIPOS DE DATOSA.1) ESTANDARTIPO DE DATO CARACTERISTICASCHAR(n) Cadenas de longitud fija. Tam máx: 255 caracteres Si se quiere meter una cadena

más grande que el campo ERRORVARCHAR2(n) Cadenas de longitud variable. Tam máx: 2000 caracteres.LONG Son los campos memo. Tam máx: 2 Gb (+ de 2000 millones de caracteres). Tienen

muchas restricciones (no se pueden meter dentro de condiciones en la SELECT,…)NUMBER Cualquier tipo de número. Formato: NUMBER [(<precisión>[, <escala>])]

<precisión>: nº de cifras que tiene el nº, incluyendo los decimales. (valores permitidos son entre 1 y 38). Por defecto es el máximo (38). Si se incluye este parámetro, 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 nulosa) 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 'año-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 configuación regional de Windows).

Forma de guardar nos en campos numéricos Valor Opciones elegidas Cómo es almacenado7456123,89 NUMBER 7456123,897456123,89 NUMBER(9) 745612347456123,89 NUMBER(9,2) 7456123,897456123,89 NUMBER(9,1) 7456123,9 (redondea)7456123,89 NUMBER(6) ERROR. EXCESO DE PRECISION1

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

7456123,89 NUMBER(7,2) ERROR. EXCESO DE PRECISION7456123,89 NUMBER(7,-7) ERROR. EXCESO DE PRECISION7456123,89 NUMBER(8,-7) 10000000

A.2) NO ESTANDARTipos de datos especiales del sistema (sólo para ORACLE):ROWID: Almacena la dirección física de cada tupla de la base de datosFormado 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>.CURRVALSacar siguiente valor de la secuencia: <nombre secuencia>.NEXTVALTABLA DUAL: Tabla creada automáticamente por ORACLE en el diccionario de datos. Es accesible por todos los usuarios. Tiene un solo campo y un solo registro. Es una tabla comodín.Ejemplos:SELECT ADD_MONTHS(SYSDATE,2) "fecha de hoy + 2 meses" FROM DUAL;TABLA TAB: Tabla creada automáticamente. Tiene los nombres de las tablasTABLA COL: Tabla creada automáticamente. Tiene los nombres de los campos de todas las tablas.

1 Si el (nº de dígitos de la parte entera) > (precisión - escala), se produce un error de exceso de precisión.2 Si escala es < 0 , se redondean las ultimas cifras de la parte entera

Page 2: SQL DE ORACLE - eGruposelistas.egrupos.net/lista/trapos/ficheros/5/verFichero/1/… · Web viewSQL (ORACLE) (En algunos SQL las ordenes acaban en ; . En otros no) A) TIPOS DE DATOS

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 rápido a las filas de una tabla en base a los

valores de una o más columnas. Todos los datos están 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 añaden/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 atrás. (ROLLBACK)

VISTAS (VIEW): Las vistas son tablas virtuales formadas a través 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 condición debe cumplirse para todos los valores de la subconsulta. Subconsultas con ANY: La condición debe cumplirse para algún valor de la subconsulta. Subconsultas anidadas correlacionadas: Una subconsulta anidada es correlacionada si se evalúa una vez por cada tupla procesada en la sentencia padre. Selecciona el registro de la consulta principal si la subconsulta devuelve algún valor.Formato: SELECT <campos> FROM <tabla1> <alias1> WHERE <expr> [NOT] EXISTS (SELECT <campos> FROM <tabla2> <alias2> WHERE <alias2>.<campo> <operador> <alias1>.<campo>)

Page 3: SQL DE ORACLE - eGruposelistas.egrupos.net/lista/trapos/ficheros/5/verFichero/1/… · Web viewSQL (ORACLE) (En algunos SQL las ordenes acaban en ; . En otros no) A) TIPOS DE DATOS

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 añadir o editar campos.Formato: ALTER TABLE <nombre tabla> [ADD (<nombre campo y características>)][DROP PRIMARY KEY][DROP FOREIGN KEY][ <definir clave primaria>][<definir clave foránea>] 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 regionesALTER 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: Transacción realizada con éxito. Formato: COMMIT [WORK]. Ejemplo: COMMITCREATE 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 más corto a las tablas de otros usuarios Formato: CREATE SYNONYM <nombre> FOR <tabla> Crea sinónimoEjemplo: CREATE SYNONYM VENTAS FOR ADMI_PP.VENTASCREATE TABLE: Crea tablas vacías.Formato 1: CREATE TABLE <nombre3> (<definición de columnas>), <clave principal>, <clave foránea>, <campos que no pueden tener valores duplicados>) crea una tabla nuevaFormato 2: CREATE TABLE <nueva tabla> AS <una SELECT> crea una copia de una tabla<definición 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 foránea>: 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 foránea no debe ser NOT NULL La clave debe existir Si no se indica tipo de borrado, se elige RESTRICTEDEjemplo: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 foránea REFERENCES DIRECCIONES Otra tabla ON DELETE CASCADE) Tipo de borrado para claves foráneasCREATE VIEW: Crea una vista. Las vistas son tablas virtuales formadas a través 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 <restricción>]] Los nombres de columnas son opcionales. Si se ponen se deben poner todos o ninguno (sólo 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 tablasOpciones; 3 En ORACLE se pueden poner nombres de 30 caracteres máximo. En otros SGBD se pueden poner + o -. Los nombres no deben producir conflictos (por ej: coincidir con una palabra clave)

Page 4: SQL DE ORACLE - eGruposelistas.egrupos.net/lista/trapos/ficheros/5/verFichero/1/… · Web viewSQL (ORACLE) (En algunos SQL las ordenes acaban en ; . En otros no) A) TIPOS DE DATOS

OR REPLACE: Si existiese una vista con ese mismo nombre, con esta opción 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 revés que FORCE. WITH CHECK OPTION: Valida las tuplas para saber si esas tuplas se pueden meter, modificar,… CONSTRAINT <restricción>: 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 oficinasEjemplo 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]

- D -DELETE FROM: Elimina registros de una tabla.Formato 1: DELETE FROM <tabla> [WHERE <condición>]Formato 2: DELETE FROM <tabla> [WHERE <aquí va una SELECT>] Si no se pone la condición 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_motoDROP SYNONYM: Elimina el sinónimo. Formato: DROP SYNONYM <nombre>Ejemplo: DROP SYNONYM ventasDROP TABLE: Elimina una tabla. Se pierden todos los datos de la tablaFormato: 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 CONSTRAINTDROP 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 UNOALTER Añadir / eliminar campos y renombrar tablasALL Todos los permisosDELETE Borrar registrosINDEX Crear índicesINSERT[(campos)] Insertar registrosREFERENCES 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 rodolfoGRANT ALL TO oscar

Page 5: SQL DE ORACLE - eGruposelistas.egrupos.net/lista/trapos/ficheros/5/verFichero/1/… · Web viewSQL (ORACLE) (En algunos SQL las ordenes acaban en ; . En otros no) A) TIPOS DE DATOS

- I -INSERT INTO…VALUES: 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 carácter (VARCHAR2, CHAR o LONG) se debe poner entre comillas. Si el campo es numérico (NUMBER), no se pone comillas. En los campos carácter se puede meter el NULL, pero si se ha definido antes al campo con la opción 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 registroINSERT INTO proveedores VALUES ('P1', 'TOMAS', 'A', 'BILBAO') Inserta un registroINSERT 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 operación basta con tener algún privilegio.Los bloqueos se pueden quitar con COMMIT & ROLLBACKFormato: 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 opción 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 datosROW SHARE (mínimo) Nivel mínimo de bloqueo. Se usa para modificar algunas filas. Los demás 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 más restringida (Permite bloqueos

de menor o igual nivel). Permite que los usuarios vean la tabla, pero las actualizaciones sólo se pueden realizar sobre filas específicas.

SHARE ROW EXCLUSIVE No permite más bloqueos sobre la tabla. Permite que se vean los registrosEXCLUSIVE (máximo) Nivel máximo 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 NOWAITLOCK TABLE coches IN ROW SHARE MODE

- R -RENAME: Cambia el nombre de una tabla. Formato: RENAME <tabla1> TO <tabla2>Ejemplo:RENAME tmp1 TO tmp3REVOKE…ON…FROM: 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 referenciasEjemplo: REVOKE ALL ON juegos FROM picnicROLLBACK: Se ha producido un error en la transacción. No guarda los cambios realizados.Formato: ROLLBACK [WORK] [TO <punto de referencia>]. Los puntos de referencia sirven para dividir una transacción grande en varias partes. Si se usa la opción TO <punto de

ref> no repite toda la transacción desde el principio. (lo hace desde ese punto)Ejemplo: ROLLBACK

- S -SAVEPOINT: Crea puntos de referencia. Formato: SAVEPOINT <nombre punto de referencia>Ejemplo: SAVEPOINT p1SELECT…FROM: Selecciona los datos que interesan de una tabla o muchas. Se parece a la orden SET FILTER TO del dBase

Page 6: SQL DE ORACLE - eGruposelistas.egrupos.net/lista/trapos/ficheros/5/verFichero/1/… · Web viewSQL (ORACLE) (En algunos SQL las ordenes acaban en ; . En otros no) A) TIPOS DE DATOS

Formato: SELECT [DISTINCT] <*| lista de campos> [expresiones4] [[AS] "<alias>"] > FROM <tablas> [[AS] <alias>] [WHERE <condición>] [GROUP BY <lista de campos> [HAVING < condición>]] [ORDER BY <lista de campos> [ASC | DESC] ] [INTO TEMP < nombre tabla temporal>] [{UNION [ALL] | INTERSECT | MINUS} <otra select>]1) OPCIONES 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 expresión se consigue crear un nuevo campo en memoria en que se guarda el resultado de

esa expresión. Se pueden usar los operadores +, -, /,… <alias>: Otra forma de llamar a las tablas. Primero se pone la tabla que se va a usar y después el alias separado por un

espacio.Ejemplos: SELECT tipo, nombre FROM TABLA T1 el alias es T13. PONER CONDICIONES CON WHERESe pueden usar los operadores lógicos AND, OR y NOT para unir condiciones y también , , , , , ! y Otras posibilidades son: <campo> [NOT] BETWEEN <val1> AND <val2>: Sólo 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 después de IN. <campo> [NOT] LIKE “<cadena>”: Se seleccionan todos los registros que el contenido del campo sea <cadena>.

Comodines 5 : _: Sustituye un carácter. %: Sustituye varios caracteres <campo> [NOT] MATCHES “<cadena>”: Se seleccionan todos los registros que el contenido del campo sea

<cadena>. Comodines: ?: Sustituye un carácter. *: Sustituye varios caracteres. <campo> IS [NOT] NULL: Se selecciona los campos que su contenido sea NULL. SCAPE '<carácter>': Si encuentra ese carácter, que salte3.1. PONER UNA SELECT DENTRO DE UNA CONDICIONSe usa cuando se debe poner una función (MAX,MIN... ) dentro de una expresión.Ejemplo: (La SELECT que está dentro de la condición selecciona el valor máximo 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 ) Ejemplo: (Selecciona todos los registros que tengan N_ARTICULO igual a 1011) (En este ejemplo se puede conseguir lo mismo poniendo SELECT MAX(PRECIO_TOTAL)... en vez de ALL (SELECT PRECIO_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 condición se cumple cuando precio total coincida con una lista de valores. ALL: La condición debe cumplirse en todos los registros seleccionados. SOME/ANY: La condición debe cumplirse por lo menos en un registro.3.2. USAR EXISTS CON UNA SELECT DENTRO DE UNA CONDICION: Devuelve verdadero cuando hay algún registro que cumpla la condición 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 INFORMACION CON GROUP BY1) 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 están 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 CONDICIONES CON HAVINGSirve para poner condiciones a los grupos (acepta o rechaza grupos de filas)Se pueden poner campos que no estén dentro de esos grupos. 6. ORDENAR CAMPOS CON ORDER BY

4 Los campos y las tablas se ponen separados por comas5 Para desactivar los comodines de LIKE y MATCHES, poner delante del comodín una \ (?)

Page 7: SQL DE ORACLE - eGruposelistas.egrupos.net/lista/trapos/ficheros/5/verFichero/1/… · Web viewSQL (ORACLE) (En algunos SQL las ordenes acaban en ; . En otros no) A) TIPOS DE DATOS

1) Nº máximo de campos que pueden ordenarse: 8 campos.2) Longitud máxima entre todos los campos a ordenar: 120 bytes.3) Igual que en GROUP BY se pueden poner números enteros en vez de los nombres de las columnas.7. CREAR UNA TABLA TEMPORAL CON INTO TEMPSe crea una tabla temporal con los campos y registros que han sido seleccionados en la SELECT.8. UNIR DOS SELECT (CON UNION & INTERSECT, MINUS)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 están a la vez en la 1ª y en la 2ª selectMINUS (operador -): Registros que están en la 1ª select y no están 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 nºs 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 UNION9. SABER COMO SE LLAMAN LAS TABLAS (ORACLE 7.0)SELECT * FROM TABEjemplo:SELECT * FROM TAB

TNAME TABTYPE CLUSTERID------------------------------ ------- ---------PRUEBA TABLEREFERENCIA TABLETABLA_NULOS TABLE

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

TNAME COLNO CNAME COLTYPE WIDTH SCALE PRECISION NULLS DEFAULTVAL------------- ----- -------------- -------- ----- ----- --------- ----------- ----------REFERENCIA 1 CLAVE_EXT CHAR 2 NOT NULLREFERENCIA 2 NOMBRE VARCHAR2 20 NOT NULLREFERENCIA 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'UNIONSELECT (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

Page 8: SQL DE ORACLE - eGruposelistas.egrupos.net/lista/trapos/ficheros/5/verFichero/1/… · Web viewSQL (ORACLE) (En algunos SQL las ordenes acaban en ; . En otros no) A) TIPOS DE DATOS

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)UNIONSELECT &&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

Page 9: SQL DE ORACLE - eGruposelistas.egrupos.net/lista/trapos/ficheros/5/verFichero/1/… · Web viewSQL (ORACLE) (En algunos SQL las ordenes acaban en ; . En otros no) A) TIPOS DE DATOS

(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 31J 0

(Se usan SELECTs dentro de los WHERE)Se puede usar = y <> porque la tabla PARAMETROS_COMUNICA sólo tiene un registroSELECT '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)UNIONSELECT '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 -UPDATE…SET…[WHERE]: Reemplaza los valores de los registros.Formato 1: UPDATE <nombre tabla> SET (<campos>)=(<valores>) [WHERE <condición>]

Page 10: SQL DE ORACLE - eGruposelistas.egrupos.net/lista/trapos/ficheros/5/verFichero/1/… · Web viewSQL (ORACLE) (En algunos SQL las ordenes acaban en ; . En otros no) A) TIPOS DE DATOS

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 todosUPDATE empleados SET sueldo = sueldo - (sueldo * 0.10) WHERE nombre = 'PEPE'UPDATE empleados SET sueldo = 100000 WHERE sueldo IS NULLUPDATE 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 líneas. 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

Page 11: SQL DE ORACLE - eGruposelistas.egrupos.net/lista/trapos/ficheros/5/verFichero/1/… · Web viewSQL (ORACLE) (En algunos SQL las ordenes acaban en ; . En otros no) A) TIPOS DE DATOS

D) FUNCIONESD.1) FUNCIONES NUMERICASABS( ): 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 división nº1 / nº2. Formato: MOD(<nº1>,<nº2>)POWER( ): Devuelve nº1nº2. Formato: POWER(<nº1>,<nº2>)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 dígitos 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.8SELECT TRUNC(4567.555), TRUNC(1, -2) FROM DUAL; devuelve 4567 y 0SQRT( ): Devuelve la raíz cuadrada de un nº . Formato: SQRT(<nº>)D.2) FUNCIONES DE GRUPOSAVG( ): Devuelve la media. Formato: AVG(<campo numérico/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 máximo. Formato: MAX(<campo>)MIN( ): Devuelve el valor mínimo. Formato: MIN(<campo>)SUM( ): Devuelve la suma de todos los registros del grupo. Formato: SUM(<campo>)D.3) FUNCIONES DE CONVERSION DE TIPOS DE DATOSTO_CHAR( ): Convierte un nº o una fecha en una cadena. Formato: TO_CHAR(<nº>).

YYYY Año (4 cifras) HH24 Hora (reloj 24 horas)YY Año (2 cifras) HH Hora (reloj 12 horas)MM Mes (1-12) MI MinutoD Dia semana (nº) [1 = lunes] SS SegundoDD Dia (1-31)DDD Nº dia del año (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 CADENASINITCAP( ): El primer carácter en mayúsculas. 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 minúsculas. Formato: LOWER(<cadena>)LPAD( ): Rellena una columna por la izquierda con el carácter indicado. (a) Si nº > longitud del campo: los espacios que sobran se rellenan por la izquierda con el carácter indicado.(b) Si nº = longitud del campo: sin cambios(c) Si nº < longitud del campo: devuelve los primeros caracteres del campoFormato: LPAD(<campo>, <nº>,<carácter>)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 carácter>)REPLACE( ): Hace 'buscar <cad1> y cambiarla por <cad2>' dentro de <cadena>.Formato: REPLACE("<cadena>","<cad1>","<cad2>")Ejemplo: SELECT REPLACE('SCOTT','S','BOY') FROM DUALRPAD( ): Aumenta el tamaño 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 carácter indicado.(b) Si nº = longitud del campo: sin cambios

Page 12: SQL DE ORACLE - eGruposelistas.egrupos.net/lista/trapos/ficheros/5/verFichero/1/… · Web viewSQL (ORACLE) (En algunos SQL las ordenes acaban en ; . En otros no) A) TIPOS DE DATOS

(c) Si nº < longitud del campo: devuelve los primeros caracteres del campoFormato: RPAD(<columna>, <ancho del campo>,<carácter>)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 carácter>)SOUNDEX( ): Busca palabras que suenen igual (en inglés). 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 carácter>)Ejemplo: SELECT '==>' || TRIM(SUBSTR(DESCRIPCION, 1, 40)) || '<==' "Sin espacios" FROM almacenes WHERE CODIGO LIKE 'A_B_'

Sin espacios--------------------------------------------------==>Almacén de la calle Bravo Murillo<====>Almacén de la calle Sainz de Baranda<==

UPPER( ): Pasa la cadena a mayúsculas. Formato: UPPER(<cadena>)D.4) FUNCIONES DE FECHAADD_MONTHS( ): Suma n meses a una fecha. Formato: ADD_MONTHS(<fecha>,<nº meses>)DAY( ): Día del mes. Formato: DAY(<fecha>)LAST_DAY( ): Nº de días del mes. Formato: LAST_DAY(<fecha>). Ejemplo: SELECT LAST_DAY(SYSDATE) FROM DUALMONTH( ): 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 DUALWEEKDAY( ): Día de la semana (0domingo, 6sábado)YEAR( ): Año de la fecha. Formato: YEAR(<fecha>)

Page 13: SQL DE ORACLE - eGruposelistas.egrupos.net/lista/trapos/ficheros/5/verFichero/1/… · Web viewSQL (ORACLE) (En algunos SQL las ordenes acaban en ; . En otros no) A) TIPOS DE DATOS

E) SQL PLUSE.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 ARTICULOSQL> 2 2* WHERE PRECIO_TOTAL > ALL (SELECT PRECIO_TOTAL FROM ARTICULOSQL> 5SP2-0226: Invalid line number [da error por que el comando tiene menos de 5 líneas]

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 DATECOD_PROVEEDOR VARCHAR2(15)USUARIO VARCHAR2(20)CANTIDAD NUMBERTIPO_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 NUMBERCNAME NOT NULL VARCHAR2(30)COLTYPE VARCHAR2(106)WIDTH NOT NULL NUMBERSCALE NUMBERPRECISION NUMBERNULLS VARCHAR2(19)DEFAULTVAL LONGCHARACTER_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 estás usando Oracle de UNIXdefine_editor = notepad Si estás usando Oracle para WindowsED | 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 PLUSGET: 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: LISTQUIT: Sale de SQL PLUS

Page 14: SQL DE ORACLE - eGruposelistas.egrupos.net/lista/trapos/ficheros/5/verFichero/1/… · Web viewSQL (ORACLE) (En algunos SQL las ordenes acaban en ; . En otros no) A) TIPOS DE DATOS

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> runSAVE: Grabar fichero. La opción REPLACE sirve para sobreescribir el fichero.Formato: SAVE <nombre> [REPLACE]Ejemplo: SAVE C:\TEMP.TXT REPLACESET 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 extensión del fichero no es .SQL hay que indicarlo.Formato: START <fichero> <args><args> son valores para variables usadas en el fichero SQLEjemplos: 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 ONE.2) GENERACION DE INFORMESBREAK: Visualiza rupturas de control activasBREAK ON: Sirve para organizar las filas recuperadas en grupos.Formato: BREAK ON <columna/ROW/PAGE/REPORT> <acción a tomar>Cosas que se pueden poner después 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 después por codigo postal ROW: Crea un grupo para cada fila recuperada. PAGE: Crea una ruptura por página REPORT: Crea un grupo al final del informaAcciones a tomas SKIP: Salta una línea SKIP <nº>: Salta n líneas PAGE: Salto de páginaBTITLE: Sirve para configurar el pie de página del informe. El texto mostrado puede ser una cadena de caracteres o una variable de tipo caracterOpciones: ON/OFF: Activa/desactiva el pie de página COL<nº>: Texto colocado en la columna indicada SKIP <nº>: Salta n líneas antes de imprimir el texto LEFT: Texto alineado a la izquierda CENTER: Texto centrado RIGHT: Texto alineado a la derechaEjemplo:BTITLE CENTER 'Confidencial';CLEAR BREAKS: Elimina cualquier tipo de ruptura activa.COLUMN: Se modifica la visualización de una columna. Esto no cambia los datos, es sólo una máscara.Formato: COLUMN <columna> FORMAT <formato> HEADING '<cabecera>' {WRAPPED | WORD_WRAPPED | TRUNCATE} NULL '<texto>' LIKE <columna> {PRINT | NOPRINT} ON / OFF NEWLINEOpciones: FORMAT: Sirve para formatear columnas.

Caracteres especiales:* A<nº>: Variable alfanumérica de n posiciones* 9: Números. No rellena con ceros a la izquierda* 0: Números. Rellena con ceros a la izquierda.* $: Indica la posicion del signo del $

Page 15: SQL DE ORACLE - eGruposelistas.egrupos.net/lista/trapos/ficheros/5/verFichero/1/… · Web viewSQL (ORACLE) (En algunos SQL las ordenes acaban en ; . En otros no) A) TIPOS DE DATOS

* . : 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 nºs negativos* PR: Usa < y > para indicar que la columna tiene nºs 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 columnaEjemplo:COLUMN ENAME HEADING 'NOMBRE|EMPLEADO' FORMAT A8COLUMN DEPTNO HEADING 'DEPARTAMENTO' FORMAT 99;COLUMN SAL HEADING 'SALARIO|MENSUAL' FORMAT $9,999.99;COMPUTE: Ver todos los computes activosCOMPUTE ... OF ... ON: Saca el mínimo, máximo, media,... de los registros que forman un grupoFormato: COMPUTE <función> OF <campo> ON <grupo (un grupo creado con BREAK)>Funciones: MAX: Máximo MIN: Mínimo AVG: Media SUM: Suma STD: Desviación estandar VAR: Varianza COUNT: nº de filas por grupoEjemplo: COMPUTE MAX OF salario ON deptno;CLEAR COMPUTES: Eliminar todos los computes activosSET LINESIZE: Nº caracteres por línea. Por defecto es 80, el máximo es 999Formato: SET LINESIZE <nº>SET PAGESIZE: Nº líneas por página, incluyendo títulos y marcas de página. Por defecto es 25SET HEADING ON/OFF: Activa/desactiva utilización de cabeceras de columna. Por defecto está a ONSET 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 están ejecutando desde dentro de un fichero. Por defecto es OFFSET FEEDBACK ON/OFF: Devuelve nº de registros seleccionados, eliminados,... Por defecto está a ONSET VERIFY ON/OFF: Indicador del valor antiguo y nuevo de una variable cuando se usa &variable. Por defectoestá a ONSET WRAP ON/OFF: Elimina espacios entre líneas.SHOW <variable>: Ver valor de la variable indicadaSHOW 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 caracterOpciones: ON/OFF: Activa/desactiva el encabezado COL<nº>: Texto colocado en la columna indicada SKIP <nº>: Salta n líneas antes de imprimir el texto LEFT: Texto alineado a la izquierda CENTER: Texto centrado RIGHT: Texto alineado a la derechaEjemplo: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 después de START

<nombre fichero> y separadas por espacios.Ejemplo:

Page 16: SQL DE ORACLE - eGruposelistas.egrupos.net/lista/trapos/ficheros/5/verFichero/1/… · Web viewSQL (ORACLE) (En algunos SQL las ordenes acaban en ; . En otros no) A) TIPOS DE DATOS

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' ) ornew 6: (b.fld3 = 'J' and b.fld5 = 'Delegado 4' ) or

Page 17: SQL DE ORACLE - eGruposelistas.egrupos.net/lista/trapos/ficheros/5/verFichero/1/… · Web viewSQL (ORACLE) (En algunos SQL las ordenes acaban en ; . En otros no) A) TIPOS DE DATOS

F) OPERADORES SQL:= : Operador de asignación. Ejemplo: rec_read := rec_read + 1< , <= , >, >= , = , < > , != y ^= : Se usan para comparar nºs, 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 != 15000SELECT CODIGO, (PRECIO * 1.16) "PRECIO CON IVA" FROM ARTICULOS WHERE PRECIO <> 15000+ - * / : Son los operadores numéricos 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 <> [también se puede usar = , pero es poco práctico]. Ejemplo:SELECT DESCRIPCION FROM ARTICULO WHERE PRECIO_TOTAL > ALL (SELECT PRECIO_TOTAL FROM ARTICULO WHERE COD_ARTICULO LIKE 'CDR%')AND, OR, NOT : Operadores lógicos. Si no hay paréntesis se ejecutan en este orden: NOT, AND, OREjemplo: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 números, cadenas, fechas,… o una SELECTSe usa principalmente en el comando SELECT y UPDATEEjemplos:(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"

Page 18: SQL DE ORACLE - eGruposelistas.egrupos.net/lista/trapos/ficheros/5/verFichero/1/… · Web viewSQL (ORACLE) (En algunos SQL las ordenes acaban en ; . En otros no) A) TIPOS DE DATOS
Page 19: SQL DE ORACLE - eGruposelistas.egrupos.net/lista/trapos/ficheros/5/verFichero/1/… · Web viewSQL (ORACLE) (En algunos SQL las ordenes acaban en ; . En otros no) A) TIPOS DE DATOS

G) ACCEDER A ORACLE CON VISUAL BASIC 6G.1) CONEXIONESa) 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 conexión [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 conexión.c.1) Si la propiedad .ConnectionString es una cadena vacia, la conexión debe abrirse con <objeto connection>.Open "<cadena de conexión>".c.2) Si la propiedad .ConnectionString no es una cadena vacia, la conexión debe abrirse con <objeto connection>.Open.Ejemplos: dbOracle.OpendbOracle.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 conexionEjemplo: dbOracle.Close

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

G.2) RECORDSETSa) Definir una variable de tipo Recordset o ADODB.Recordset (Ej: Dim recBuscador as New Recordset)b) Meter comando SQL en una variable de tipo carácter (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 después). [por motivos practicos (velocidad), elegir tipo de bloqueo 'Sólo lectura' (adLockReadOnly) y tipo de recordset 'Static' (adOpenStatic)].Formato: <recordset>.Open "<comando SQL>", <tipo recordset>, <tipo bloqueo>Ejemplo:Dim rec as New ADODB.RecordsetDim strSQL as String'------------------------------'dbOracle es la conexión 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 método Execute de las conexionesa) Meter comando SQL en una variable de tipo carácter (por ejemplo, un INSERT) [opcional]b) Hacer esto: <objeto connection>.Execute "<comando SQL>"

G.4) TRUCOSA) DATOS DE TIPO NUMERICOLa forma más simple de convertir los nºs de las textbox (o cualquier otro control) al formato usado por Oracle es:Str(CDbl(<nº>))La función 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 CARACTERLa forma más simple es usar la función 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,"'","''") & "'"

Page 20: SQL DE ORACLE - eGruposelistas.egrupos.net/lista/trapos/ficheros/5/verFichero/1/… · Web viewSQL (ORACLE) (En algunos SQL las ordenes acaban en ; . En otros no) A) TIPOS DE DATOS

C) DATOS DE TIPO FECHA* Una forma más simple es usar {d 'año-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 formatostrSQL = "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 IfIf (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 opción es usar la función TO_DATE( ) . La fecha debe pasarse en formato año-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 formatostrSQL = "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 IfIf (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 opción es usar la función TO_CHAR( ) . La fecha debe pasarse en formato año-mes-dia. Se aprovecha que las cadenas se comparan por su código ASCII. (Ej: "2" > "0")Ejemplo: Dim strTemp As Strng'----------------------------------------'coge la fecha del dtPicker y la da un formatostrSQL = "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') >= " & strTempEnd IfIf (Not IsNull(dtpFechaFin.Value)) Then strTemp = Format(dtpFechaFin.Value,"'yyyy-mm-dd'") strSQL = strSQL & "AND " & vbcrlf & _ " TO_CHAR(FECHA, 'yyyy-mm-dd') <= " & strTempEnd If

Page 21: SQL DE ORACLE - eGruposelistas.egrupos.net/lista/trapos/ficheros/5/verFichero/1/… · Web viewSQL (ORACLE) (En algunos SQL las ordenes acaban en ; . En otros no) A) TIPOS DE DATOS

'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'