Академический Документы
Профессиональный Документы
Культура Документы
A) TIPOS DE DATOS
A.1) ESTANDAR
TIPO DE DATO
CHAR(n)
CARACTERISTICAS
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 nos 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 PRECISION1
7456123,89
NUMBER(15,1)
7456123,8 (no redondea)
7456123,89
NUMBER(7,-2)
74561002
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
2
Si el (n de dgitos de la parte entera) > (precisin - escala), se produce un error de exceso de precisin.
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>)
- 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 <nombre3> (<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;
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)
3
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]
- D -
- G -
- 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 -
- S -
Para desactivar los comodines de LIKE y MATCHES, poner delante del comodn una \ (?)
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 INTO TEMP
Se 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 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
-----------------------------PRUEBA
REFERENCIA
TABLA_NULOS
TABTYPE CLUSTERID
------- --------TABLE
TABLE
TABLE
COLNO
----1
2
3
4
CNAME
-------------CLAVE_EXT
NOMBRE
V_DEFECTO
COD
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
- U -
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
Ao (4 cifras)
Ao (2 cifras)
Mes (1-12)
Dia semana (n) [1 = lunes]
Dia (1-31)
N dia del ao (1-366)
N trimestre (1-4)
HH24
HH
MI
SS
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')
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>)
E) SQL PLUS
E.1) PRINCIPALES COMANDOS
Null?
Type
-------- --------------VARCHAR2(2)
NOT NULL VARCHAR2(10)
NOT NULL VARCHAR2(3)
NOT NULL VARCHAR2(10)
DATE
VARCHAR2(15)
VARCHAR2(20)
NUMBER
VARCHAR2(1)
Null?
-------NOT NULL
NOT NULL
NOT NULL
Type
-----------------VARCHAR2(30)
NUMBER
VARCHAR2(30)
VARCHAR2(106)
NOT NULL NUMBER
NUMBER
NUMBER
VARCHAR2(19)
LONG
VARCHAR2(44)
DESCRIBE TAB;
(Esto es lo que SQL PLUS saca por pantalla)
Name
Null?
----------------------------------------------------- -------TNAME
NOT NULL
TABTYPE
CLUSTERID
Type
-----------------VARCHAR2(30)
VARCHAR2(7)
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.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:
F) OPERADORES SQL
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.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))
* 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
'
'
'