RESUMEN 1Z0-051
###############
<TAB>------------
CAPITULO 1.-
------------
3.- DESCRIBE
------------
- select * from tab;
5.- Scripts
------------
- Herramientas (save - edit - get - start (@) - @@
- spool filename .lst <append>
- Comentarios (rem , /* ... */, "--") - SET DOCUMENT OFF
- Mostrar linea texto (comando prompt)
6.- Datatypes
------------
...
sql> select empno, ename, mgr, LEVEL from emp connect by prior empno=mgr;
10.- WHERE
------------
- SQL> select first_name || ' ' || last_name "Name", department_id from employees
where department_id = 90;
- Operadores comparaci�n: (=,!=, <>, <, >, <=, >=) (ANY / ALL; antecedido por
operador comparaci�n)
- ANY / ALL; m�s operador comparaci�n - ... WHERE department_id <= ANY (10, 15, 20,
25);
- Operadores logicos:
-- NOT ... WHERE not (department_id >= 30);
-- AND: (TRUE / UNKNOWN = UNKNOWN)
-- OR: (FALSE / UNKNOWN = UNKNOWN)
- Otros operadores:
-- IN / NOT IN ... WHERE department_id IN (10, 20, 90);
-- BETWEEN ... WHERE salary BETWEEN 5000 AND 6000;
-- EXISTS ... WHERE EXISTS (select 1 FROM departments d WHERE d.department_id =
e.department_id);
-- IS NULL / IS NOT NULL
-- LIKE ... WHERE job_id like 'AC\_%' ESCAPE '\';
11.- ORDER BY
------------
- ... ORDER BY mid ASC, salary DESC, hire_date; Se puede ordernar por varias
columnas
- ... ORDER BY 'Region ' || region_id; Debe coincidir el ORDER con la SELECT
- ... ORDER BY 4, 2, 3; Ordenaci�n por orden columnas
- ... ORDER BY commission_pct ASC NULLS FIRST, last_name DESC; Ordenaci�n de los
NULLS (el NULL es valor MAX)
12.- CASE
------------
SQL> SELECT first_name, department_id, salary,
CASE
WHEN salary < 6000 THEN 'Low'
WHEN salary < 10000 THEN 'Medium'
WHEN salary >= 10000 THEN 'High'
END Category
FROM employees
WHERE department_id <= 30
ORDER BY first_name;
13.- V$SESSION
------------
- SQL> SELECT username, sid, serial#, program FROM v$session;
- SQL> SELECT username, sid, serial#, program FROM v$session WHERE username is NOT
NULL ORDER BY logon_time;
Ejemplo 1.-
PROMPT - PROBANDO VARIABLES CON DEFINE (funciona todo correctamente):
Prompt Introduzca usuario a utilizar:
define vd_usuario = "&1"
PROMPT Introduce la passwd del usuario &vd_usuario:
conn &vd_usuario
select '&vd_usuario' vd_usuario from dual;
select USER from dual;
Ejemplo 2.-
- SQL> DEFINE DEPT = 20 (definir valor)
DEFINE DEPT = �20� (CHAR)
...
3* WHERE department_id = &DEPT
- SQL> ... WHERE job_id = '&JOB._REP' (concatena texto)
- SQL> SELECT &&COL1, &&COL2 ... (se guarda valor)
UNDEFINE COL1 COL2
- SQL> ... WHERE &1 = &2; (var parametro posicional)
Examen Capitulo 1
-----------------
01Cok. "Employee Salary"
02BerrA. order by: producen el mismo resultado: SE PUEDE USAR EL NOMBRE DE COLUMNA
AUNQUE LLEVE ALIAS !!!!
03DerrB. Quitar parentesis: produce el mismo resultado porque primero se realizan *
y /
ok4. literal? : A - 10 ; C - Employee Name
05Bok. 34567.23 -> se redondea NUMBER(7,2)
06AerrB. length DATE 9 DD-MON-YY
err7. distinct : (D) errA - Explicaci�n: DISTINCT debe ir inmediatamente despues de
SELECT
ok8. query limit: B - where
09Bok. 7934 -> nombre MILLER que al ser el mayor se ordena primero por DESC
10Dok. BETWEEN A AND C: 3 filas (no entra C??? porque es mayor) Explicaci�n:
between permite buscar entre strings con carac: 'CLARK' is > 'C'
11Cok. linea 4 error: no se puede usar un alias en WHERE
12Aok. operador IN puede sustituir a OR
13Bok. orden 2,1,3 where from order by
ok14. like escape: C - like 'DI\_%' ESCAPE '\';
15Cok. ... CASE region_id WHEN 1 THEN '' WHEN ''.. ELSE '' END Continent
16Dok. select todas las columnas *
17Bok. 17-DEC-90 primero: ORDER BY ASC por defecto
18Dok. ORDER BY ASC por defecto
err19. escape Like : (D) C - \ : Explicaci�n: no hay caracter por defecto para
patr�n de busqueda, hay que definirlo.
20Bok. alias no puede usarse en WHERE
21AerrC. query error porque la sustituci�n de var no lleva el &: las var NO son
sensibles may/min
22ABerrBC. &&var: disponible sesion ; &n paso valor por argumento disponible sesion
23Dok. like 'BL%' order by ... desc;
24Cok. querys exec pero dif resultados IN(0,NULL) - comm = 0 or comm IS NULL
TAB>------------
CAPITULO 2.- USING SINGLE-ROW FUNCTIONS
------------
Las funciones son programas que toman cero o m�s argumentos y retornan un solo
valor.
Tipos:
- Funciones de una sola fila
Operan una expresi�n derivada de columnas o literales, siendo ejecutadas para cada
fila recibida.
Incluyen funciones de conversi�n.
- Funciones de grupo
- Funciones anal�ticas y funciones de expresi�n regular
- Funciones de lenguaje-National
- Funciones de referencias a objetos
- Funciones de definici�n programada
- Date-Format Conversion
El formato fecha viene definido en el par�metro NLS (NLS_DATE_FORMAT - National-
languaje support). Por defecto es DD-MON-RR.
SQL> ALTER SESSION SET NLS_DATE_FORMAT='DD-Mon-YYYY HH24:MI:SS';
- Date-Function Overview
- Date-Function Descriptions
--01. SYSDATE: retorna fecha y hora con segundos del SO con tipo DATE en formato
definido en NLS_DATE_FORMAT: 31-MAR-2008 12:00:13 PM
--02. SYSTIMESTAMP([p]): retorna fecha y hora con fraccion de segundos (6 digitos
precisi�n) del SO con tipo TIMESTAMP TZ en formato
definido en NLS_TIMESTAMP_TZ_FORMAT: 1-MAR-08 12.01.49.280000 PM -05:00
--03. LOCALTIMESTAMP([p]): retorna fecha y hora de la zona horaria de la sesi�n con
fracci�n de segundos: 31-MAR-08 02.02.49.272000 PM en formato
definido en TIME_ZONE
--04. CURRENT_DATE:retorna fecha y hora con segundos de la zona horaria del cliente
seg�n calendario Gregoriano con tipo DATE en formato definido en NLS_DATE_FORMAT:
31-MAR-2008 12:00:13 PM.
Si configuramos TIME_ZONE = 'US/Eastern' nos dar� hora local de US.
SQL> ALTER SESSION SET NLS_DATE_FORMAT='DD-Mon-YYYY HH24:MI:SS';
SQL> alter session set TIME_ZONE = 'US/Eastern';
SQL> select current_date from dual; -- 21-Feb-2016 06:52:27
SQL> alter session set TIME_ZONE = 'Europe/Madrid';
SQL> select current_date from dual; -- 21-Feb-2016 12:52:27
--05. CURRENT_TIMESTAMP([p]): retorna fecha y hora de la zona horaria de la sesi�n
con fracci�n de segundos: 31-MAR-08 02.02.49.272000 PM en formato
definido en TIMESTAMP WITH TIME ZONE: 31-MAR-08 12.23.43.305000 PM US/EASTERN
- Conversion-Function Overview
Tipos de datos:
- Caracter: CHAR, VARCHAR2, NCHAR, NVARCHAR2 y CLOB.
- Num�rico: NUMBER, BINARY_DOUBLE y BINARY_FLOAT
- Fecha/Hora: DATE, TIMESTAMP e INTERVAL
- Conversion-Function Descriptions
-- ASCIISTR(c1): retorna todos los caracteres con su equivalencia ASCII o
formato \xxxx (representaci�n UTF-16 de los NO ASCII)
SQL> select ASCIISTR('ca�on') from dual; -- ca\00F1on
-- BIN_TO_NUM(b): de un binario obtiene un num.
SQL> select bin_to_num(1,0,0,0), bin_to_num(0,1) from dual;
-- CAST(exp AS dt): convierte tipos
SQL> select cast(sysdate as timestamp with local time zone) from dual;
- Conversiones permitidas:
- CHAR, VARCHAR2: no NCHAR/NVARCHAR2
- NCHAR, NVARCHAR2: no CHAR/VARCHAR2
- NUMBER: no DATE..., RAW/ROWID_UROWID
- BINARY_FLOAT/DOUBLE: no DATE..., RAW/ROWID_UROWID
- DATE...: solo CHAR/VARCHAR2
- RAW: solo CH y NCH
- ROWID, UROWID: solo CH y NCH
- Miscellaneous-Functions Overview
- Miscellaneous-Function Descriptions
/* GESTION DE NULOS */
--01 NVL select nvl(null,0) from dual;
--02 NVL2 select nvl2(null,'no es nulo','es nulo') from dual;
--03 COALESCE select coalesce(null,'el segundo valor no es nulo y se selecc',null)
from dual;
/* FUNCIONES CARACTER*/
--01.ASCII select ASCII('B') from dual;
--02.CHR select CHR(66) from dual;
--03 CONCAT select concat('cara','col') from dual;
--04 INITCAP select initcap('hola mundo') from dual;
--05 INSTR select instr('caracolcol','col',-1,2) from dual;
--06 INSTRB
--07 SUBSTR select substr('12 34',-2,2) from dual;
--08 SUBSTRB
--09 LENGTH select length('12345') from dual;
--10 LENGTHB select lengthb('12345') from dual;
--11 VSIZE select last_name, vsize(last_name) from employees; -- Kaufling 8
--12 LOWER select lower('ABCD') from dual;
--13 UPPER select upper('abcd') from dual;
--14 LPAD select lpad('12345',10,'x') from dual;
--15 RPAD select rpad('12345',10,'x') from dual;
--16 LTRIM select ltrim('---12345','-') from dual;
--17 RTRIM select rtrim('122345---','-') from dual;
--18 TRIM select trim(BOTH '-' from '-12-45-') from dual;
--19 REPLACE select replace('girasol','gir','car') from dual;
--20 TRANSLATE select translate('Murcielago','aei','*?�') from dual
--21 SOUNDEX
/* FUNCIONES NUMERICAS */
--01 ABS select abs(-1) from dual;
--02 CEIL select ceil(9.5), ceil(-9.5) from dual;
--03 FLOOR select floor(9.5), floor(-9.5) from dual;
--04 ROUND select round(123.45), round(123.485,2), round(123.456,-2) from dual;
--05 TRUNCATE select trunc(123.45), trunc(123.485,2), trunc(123.456,-2) from dual;
--06 MOD select mod(13,5), mod(10,5) from dual;
--07 REMAINDER select remainder(13,5), remainder(10,5) from dual;
--08 POWER select power(2,3) from dual
--09 SIGN select sign(-5), sign(5), sign(null) from dual;
--10 SQRT select sqrt(64) from dual
--11 WIDTH BUCKET select width_bucket(salary,2500,11000,10) RANGO, salary from
employees order by RANGO;
/* FUNCIONES DATE-TIME */
set pages 170;
alter session set NLS_DATE_FORMAT='DD/MM/YYYY HH24:MI:SS';
alter session set nls_timestamp_format='DD/MM/YY HH24:MI:SS.FF';
ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT='DD/MM/YY HH24:MI:SS TZR';
ALTER SESSION SET TIME_ZONE = 'US/Eastern';
--ALTER SESSION SET TIME_ZONE = '+01:00';
--ALTER SESSION SET TIME_ZONE = 'Europe/Madrid';
/* FUNCIONES DE CONVERSION*/
--01 CAST select cast(sysdate as timestamp with time zone) from dual; -- 28/02/2016
20:14:07,000000 +01:00
-- Compatibilidad tipos:
-- CHARs: no NCHARs
-- NCHARs: no CHARs
-- NUMBER: no DATEs, RWs...
-- BINARYs: no DATEs, RWs...
-- DATE: solo CHARs
-- RWs: solo CHARs, NCHARs
--02 TO_NUMBER
-- select to_number('123') from dual;
-- select to_number(123) from dual;
--03 TO_BINARY_DOUBLE(cad_num) select to_binary_double('1234.5678','999999.9999')
from dual; -- 1234,5678
--04 TO_BINARY_FLOAT(cad_num) select to_binary_float('1234.5678','999999.9999')
from dual; -- 1,2345E+37
--05 TO_CHAR(date_num)
-- select to_char(sysdate,'"On the "Ddspth" day of "Month, YYYY',
'NLS_DATE_LANGUAGE=Spanish') from dual;-- On the Twenty-Ninth day of Febrero ,
2016
-- SELECT TO_CHAR(-
1234.56,'L099G999D99MI','NLS_NUMERIC_CHARACTERS='',.''NLS_CURRENCY=''DM''NLS_ISO_CU
RRENCY=''GERMANY''') Balance FROM dual; -- DM001.234,56-
--06 TO_CLOB(tipochar) -- select to_clob('cadena') from dual; -- cadena
--07 TO_LOB(long_raw)
/* FUNCIONES MISCELANEA */
-- Pr�logo.-
Funciones REGEXP (REGular EXPressions): permiten el procesamiento intensivo de
cadenas de caracteres con bbdd Oracle y lenguajes SQL y PL/SQL.
-- El metacaracter punto(.)
Coincide con cualquier caracter: ca.a (casa: si - pata: no)
-- El metacaracter suma(+)
Coincide con cualquier num de caract. iguales al car que precede: cas+a
(cassa: si - tassa: no)
-- El metacaracter asterisco(*)
Coincide con cualquier num de caract. iguales al car que precede o no existe:
ca*a (cassa: si - caa: si - lasa: no)
-- El metacaracter [^abc...]
No deben coincidir los caract: ca[^snt]s (casa:no, cala:si)
-- El metacaracter subexp(expr).
Toda la exp entre parentesis representa una cad de car. La exp se puede
conjugar con metacaracteres.
chau(hola)*chau: (chauholachau:si, chauholaholachau:si, chauchau:si,
holachau:no, chauhochau:no)
-- Clases de caracteres:
Hemos visto varios ejemplos para demostrar el potencial y utilidad que nos ofrecen
las expresiones regulares en las bases de datos Oracle. Existen muchos m�s
metacaracteres que no hemos mencionado aqu�. Las funciones tampoco las hemos visto
en profundidad; hay m�s argumentos para hacer b�squedas que ignoren may�sculas y
min�sculas, etc. Para seguir profundizando el tema, aqu� dejamos algunos links de
inter�s:
Regular-Expressions.info
The Premier website about Regular Expressions
http://www.regular-expressions.info/
<TAB>------------
CAPITULO 3.- Funciones de Grupo
------------
RESUMEN:
select column|exp|group_function(colum|exp[alias]),...
from table
where conditions
group by col|exp
having group_conditions
order by col|exp|num_pos ASC|DESC|NULL FIRST|LAST;
- HAVING solo puede aparecer si aparece GROUP BY; y puede aparecer antes o despu�s
de este.
3.1 Fundamentos
Las funciones de grupo (o funciones de agregado) retornan un valor basado en un num
de elementos que no est�n determinados hasta que se ejecuta la consulta.
No consideran valores NULL excepto COUNT(*).
Si todos los elementos son NULL o no hay valores se retorna NULL, con la excepci�n
de COUNT que devuelve el valor 0.
La funciones de grupo se pueden aplicar a todos los elementos (ALL - por defecto) o
teniendo en cuenta solo los distintos (DISTINCT)
- GROUPING SETS: nos permite obtener primero la suma de salarios por dept y despu�s
por job
sql> select deptno,job,sum(sal) from emp group by grouping sets((deptno),
(job));
DEPTNO JOB SUM(SAL)
---------- --------- ----------
10 8750
20 10875
30 9400
ANALYST 6000
CLERK 4150
MANAGER 8275
PRESIDENT 5000
SALESMAN 5600
- ROLLUP: mostraremos ahora la suma de salarios por depto y job indicando primero
el total por dto y al final el total de todos los departamentos
sql> select deptno,job,sum(sal) from emp group by rollup(deptno,job);
DEPTNO JOB SUM(SAL)
---------- --------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
10 8750
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
20 10875
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
30 9400
29025
CUESTIONES T3.-
---------------
01Dok.- Afirmaci�n correcta seg�n las siguientes consultas:
sql> select max(long), max(lat) from state;
sql> select max(long), max(lat) from state group by state_id;
D. La setencia 1 muestra dos columnas y la 2 dos valores por cada estado.
13AerrB.- Considerando las dos cons siguientes elige las opciones correctas:
sql> select substr(first_name, 1,1) fn, sum(salary) from employees group by
first_name;
sql> select substr(first_name, 1,1) fn, sum(salary) from employees group by
substr(first_name,1,1);
B. 1 y 2 producen distinto resultado
NO A. 1 y 2 producen el mismo resultado
14Dok.- que diferencias hay entre los resultados de las siguientes consultas:
sql> select count(*), sum(salary) from emp;
sql> select count(salary), sum(salary) from emp;
D. la consulta 2 puede mostrar un valor menor de COUNT que la consulta 1
<TAB>------------
CAPITULO 4.- USING JOINS AND SUBQUERYS
------------
3.- Subqueries
------------
Consulta hija que arrojan un resultado dentro de una consulta padre. Si hay varias
se evalua primero la m�s interior.
Pueden usarse con todas las sentencias DML.
Si las columnas de las subcon tienen el mismo nombre que la cons.padre es buena
idea el uso de nombre o alias de tablas.
La subcon debe encerrarse entre par�ntesis y colocarse a la derecha del operador de
comparaci�n cuando se usa en el WHERE.
- Inline View: subconsultas en el FROM que permiten encontrar valores top y ORDER
BY. Pueden anidarse sin limite cuaquier numero de subconsultas.
Una subconsulta puede aparecer en el FROM; funciona como una vista por lo que se
denominan INLINE VIEW.
Se cierran entre par�ntesis y pueden tener alias. Pueden ser referenciadas
en la consulta padre en el SELECT.
-- SQL> SELECT first_name, salary, avg_salary
FROM employees,
(SELECT department_id, AVG(salary) avg_salary
FROM employees e2 GROUP BY department_id) dept
WHERE employees.department_id = dept.department_id
AND first_name like 'B%';
-- SQL> select first_name, salary, avg_salary from employees
NATURAL JOIN
(select department_id, AVG(salary) avg_salary from employees e2 group
by department_id) dept,
WHERE ...
- Tipos de subqueries:
-- Anidadas: en el WHERE (hasta 255 niveles)
-- Correlacionadas: por cada fila procesada de la tabla-padre por la consulta-
padre se evalua la subconsulta correl. una vez.
-- Escalar: retorna una sola fila y un solo valor de columna. Puede usarse
cualquier nombre de columna o expresi�n.
- Subconsultas una-fila (single-row): subcon. retorna una sola fila como resultado.
La subcon. normalmente usa operador (=)
SQL> select last_name, first_name, salary from employees where salary = (select
max(salary) from employees);
-- La cons.padre puede retornar mas de una fila, pero la subcon.hija solo
devuelve un resultado.
SQL> select last_name, salary from employees where department_id = (select
department_id from departments where department_name = 'Accounting');
-- Se pueden usar todos los operadores de comparaci�n (=,>,>=,<,<= or <>).
Si se usan dos subcon.hijas se ejecutan primero y el resultado es pasado a la
cons.padre.
SQL> select last_name, department_id from employees
where department_id < (select max(deparment_id) from deparments where
location_id =1500)
and hire_date >= (select min(hire_date) from employees where
department_id = 30);
Examen Capitulo 4
-----------------
1Cok.- line error: si alias no nombres de tabla
2Aok.- todos los customer names y orders relacionados
3Bok.- la con. retorna NULL, NULL porque no tiene ninguna ORDER (se listan todos
los customer)
4Cok. ANSI join condition: ON
5ByDok.- NATURAL LEFT OUTER JOIN (sin alias) y LEFT OUTER JOIN ... ON
6ACok. A(OR)-C(IN) operators no permitidos en OUTER JOIN
7BCerrAD.- An ORDER BY clause can be used in the subquery appearing in the FROM
clause, but not in the WHERE clause.
- Aok. ORDER BY puede ser usado en el FROM subconsulta (... FROM ... JOIN (subcon
con ORDER BY) ON condici�n)
- Berr. ORDER BY no puede ser usado en el WHERE subconsulta equijoin (... FROM ...
WHERE colum = (subcon con ORDER BY)
- Cok. GROUP BY permitido en FROM...JOIN y WHERE(colums)IN subconsulta para
equijoin.
- Derr. si USING no calificar columnas en SELECT (no e.hire_date)
--07BD
/* A.
SELECT last_name, e.hire_date, department_id
FROM employees e
JOIN (SELECT max(hire_date) max_hire_date
FROM employees ORDER BY 1) me
ON (e.hire_date = me.max_hire_date)
--Las opciones A y B tienen una cl�usula ORDER BY en la subconsulta.
--Una cl�usula ORDER BY se puede utilizar en una subconsulta si aparece en la
cl�usula FROM, pero no en la cl�usula WHERE.
*/
/* B - ERROR
--...WHERE hire_date = (SELECT MAX (hire_date) max_hire_date FROM employees ORDER
BY 1)
-- *
--Error at line 1
--ORA-00923: palabra clave FROM no encontrada donde se esperaba
SELECT last_name e.hire_date, department_id
FROM employees e
WHERE hire_date = (SELECT MAX (hire_date) max_hire_date FROM employees ORDER BY
1);
--Las opciones A y B tienen una cl�usula ORDER BY en la subconsulta.
--Una cl�usula ORDER BY se puede utilizar en una subconsulta si aparece en la
cl�usula FROM, pero no en la cl�usula WHERE.
*/
/* C
SELECT last_name, e.hire_date, department_id
FROM employees e
WHERE (department_id, hire_date) IN
( SELECT department_id, MAX (hire_date) hire_date
FROM employees
GROUP BY department_id)
--Las opciones C y D utilizan la cl�usula GROUP BY en la subconsulta, y su uso est�
permitido en FROM, as� como las cl�usulas WHERE.
--Opci�n D dar� un error porque DEPARTMENT_ID en la cl�usula SELECT es ambiguo y
por lo tanto no necesita ser calificado como e.DEPARTMENT_ID.
*/
/* D - ORA-00918: columna definida de forma ambigua
SELECT last_name, e.hire_date, department_id FROM employees e JOIN
(SELECT department_id, max(hire_date) hire_date FROM employees GROUP BY
department_id) me
USING (hire_date)
--Las opciones C y D utilizan la cl�usula GROUP BY en la subconsult, y su uso est�
permitido en FROM, as� como las cl�usulas WHERE.
--Opci�n D dar� un error porque DEPARTMENT_ID en la cl�usula SELECT es ambiguo y
por lo tanto no necesita ser calificado como "e.hire_date".
--Otro problema con la opci�n D es que si usamos USING no puede ser calificado;
e.hire_date.
*/
EJEMPLO SUBCON: Encontrar espacio ocupado y libre usando vistas del diccionario.
-----------------
Se debe tener permiso SELECT_CATALOG_ROLE: proporciona acceso a todas las vistas de
SYS.
Consultas a utilizar:
- DBA_TABLESPACES: muestra el nombre del tablespace, tipo, ...
- DBA_DATA_FILES: muestra los datafiles asociados a un TBS permanente o UNDO, y el
tama�o del datafile. La suma del tama�do de DTF dar� el tama�o del TBS.
- DBA_TEMP_FILES: muestra los fich temporales asociados con un TBS temporal y
tama�o.
- DBA_FREE_SPACE: muestra espacio libre de cada TBS.
<TAB>------------
CAPITULO 5.- Manipulaci�n de datos
------------
-- SUBCONSULTA
insert into t1 (t1c1) select t1c1 from t2;
insert into t1 select * from t2;
update t1 set (t1c1,t1c2) = (select t1c1,t1c2 from t2);
delete t1 where rowid = (select max(rowid) from t1);
update employee e set salary = (select salary from salaries s where e.job_id =
s.job_id) where dept_id = 22;
update (select prod_id, cust_id, quantity_sold, time_id from sales) set
time_id='22-MAR-2007';
5.1.4 Truncate
Sentencia DDL por lo que su ejecuci�n conlleva COMMIT y no permite ROLLBACK.
Solo DML permite ROLLBACK.
Particularidades de TRUNCATE frente a DELETE:
- Es una sentencia DDL y produce COMMIT de los cambios realizados en la
sesi�n.
- Es mas rapido ya que no genera informaci�n UNDO.
- No se puede truncar una table padre si esta referenciada por una FK de una
tabla hija; hay que deshabilitarla primero.
- No se activa ning�n trigger al ejecutarse
- El espacio de almacenamiento de la tabla y sus indices son reseteados a su
tama�o inicial.
- Resetea la marca high-water de la tabla y de todos sus indices.
- No se puede conceder permiso de TRUNCATE a un usuario para truncar tablas
de otro usuario. Se requiere DROP ANY TABLE.
https://docs.oracle.com/cd/B12037_01/appdev.101/a42525/ch07.htm
You end a transaction in one of the following ways:
- Code a COMMIT or ROLLBACK statement, with or without the RELEASE option. This
explicitly makes permanent or undoes changes to the database.
- Code a data definition statement (ALTER, CREATE, or GRANT, for example) that
issues an automatic commit before and after executing. This implicitly makes
permanent changes to the database.
Ejemplo:
delete hr.cat;
insert into hr.cat values (1,'1');
commit;
select * from hr.cat; -- 1,1
update HR.CAT set id_cat=1, cat_cat='2' where id_cat=1;
savepoint A1;
select * from hr.cat; -- 1,2
update HR.CAT set id_cat=1, cat_cat='3' where id_cat=1;
select * from hr.cat; -- 1,3
rollback to savepoint A1;
select * from hr.cat; -- 1,2
rollback;
select * from hr.cat; -- 1,1
A row share lock (RS), also called a subshare table lock (SS), indicates that
the transaction holding the lock on the table has locked rows in the table and
intends to update them. An SS lock is the least restrictive mode of table lock,
offering the highest degree of concurrency for a table.
A row exclusive lock (RX), also called a subexclusive table lock (SX),
indicates that the transaction holding the lock has updated table rows or issued
SELECT ... FOR UPDATE. An SX lock allows other transactions to query, insert,
update, delete, or lock rows concurrently in the same table. Therefore, SX locks
allow multiple transactions to obtain simultaneous SX and SS locks for the same
table.
A share table lock (S) held by one transaction allows other transactions to
query the table (without using SELECT ... FOR UPDATE) but allows updates only if a
single transaction holds the share table lock. Multiple transactions may hold a
share table lock concurrently, so holding this lock is not sufficient to ensure
that a transaction can modify the table.
A share row exclusive table lock (SRX), also called a share-subexclusive table
lock (SSX), is more restrictive than a share table lock. Only one transaction at a
time can acquire an SSX lock on a given table. An SSX lock held by a transaction
allows other transactions to query the table (except for SELECT ... FOR UPDATE) but
not to update the table.
An exclusive table lock (X) is the most restrictive mode of table lock,
allowing the transaction that holds the lock exclusive write access to the table.
Only one transaction can obtain an X lock for a table.
CUESTIONES.-
------------
<TAB>------------
CAPITULO 6.- CREANDO TABLAS Y CONSTRAINTS
------------
1.- Schema Objects
------------
- Esquema: colecci�n de objetos relacionados y agrupados en una misma base de
datos.
Un esquema es propiedad de un usuario de base de datos y coinciden en el nombre. Si
un usuario no es propietario de ning�n objeto no existe entonces esquema asociado
con �l. Un usuario de db puede tener un solo esquema.
- Otros objetos:
-- Vistas materializadas: son vistas que recopilan y almacenan los datos
recopilados ocupando espacio de almacenamiento.
-- Dimension: estructura logica definida en el diccionario de datos que
relacionan columnas de tablas sin ocupar espacio de almacenamiento.
-- Cluster: es un m�todo de almacenamiento de datos de tablas relacionadas en una
localizaci�n f�sica com�n. Por ej, un cluster puede ser creado sobre las tablas
pedidos y proveedores sobre las filas asociadas pedido-proveedor utilizando el
mismo bloque de almacenamiento.
-- Triggers: procedimiento almacenado PL/SQL que se ejecuta cuando una condici�n
espec�fica ocurre; cuando se realiza un insert, update, o delete, cuando se inicia
una bbdd, o cuando ocurren errores.
-- Java Objects: java classess, java sources y java resources.
-- PL/SQL programs: procedimientos (programas), funciones (devuelven valor) y
package (grupo de objetos PL/SQL)
-- Tipos num�ricos:
-- NUMBER: NUMBER [ precisi�n / escala ]
- Representaci�n tipos float, integer, decimal, double; negativo o
positivo.
- Precisi�n: total numeros; escala (parte decimal) Ej; (5,2) ->
999,999 = 100
- Precision (rango 1,38) ; Escala (rango -84,127)
- Si no se incluye decimal solo se puede introducir 5-2=3 numeros
(999)
- Si se supera la parte decimal se redondea (4,2) -> 12,125 = 12,13
- No se puede exceder la precisi�n: (4,2) -> 123,1 ERROR; 12,31 OK
- Escala > Precisi�n: (3,5) 0,00999
- Escala negativa: 1234567 (5,-2) 12345600: redondeo
- Escala negativa: representaci�n de s+p (5,-2) 5+2=7 12345678 ERROR
fuera de rango
-- BINARY_FLOAT: - Representa numero 32-bit punto flotante.
- Binary precisi�n; 5 bytes almacenamiento.
-- BINARY_DOUBLE: - Representa numero 64-bit punto flotante.
- Binary precisi�n; 9 bytes almacenamiento.
-- FLOAT: FLOAT [precision binary] subtipo de NUMBER.
- User BINARY_DOUBLE o BINARY_FLOAT
-- Tipos INTERVALO
-- A�O-MES: INTERVAL YEAR [precision] TO MONTH
- Representa un periodo de tiempo como a�os y meses
- Precision a�o 0-9, default 2
- iy2m INTERVAL YEAR (3) TO MONTH; TO_YMINTERVAL('3-7'); +003-07
-- DIA-SEGUNDO: INTERVAL DAY [precision] TO SECOND
- Representa un periodo de tiempo como dias, horas, minutos y segundos.
- Precision dia 0-9, default 6. Ej. precision 2 permite valores de 0 a 99.
- id2s INTERVAL DAY (4) TO SECOND; TO_DSINTERVAL('4 02:20:30.30'); +0004
02:20:30.300000
/* EJEMPLO INTERVALOS
drop table t_intervalo;
create table t_intervalo (iym1 interval year(3) to month, ids1 interval day(3)
second(3));;
desc hr.t_intervalo;
insert into t_intervalo values ('123-7','123 02:20:30'); -- +123-07 +123
02:20:30.001000
select * from t_intervalo;*/
--DESC COUNTRY;
INSERT INTO HR.COUNTRY VALUES (1000,'USA',default)
--desc state;
insert into STATE VALUES ('ALB','ALABAMA',1000,'MONTGOMERY',default);
--desc cyti
insert into HR.CYTI VALUES ('HUNT','HUNTSVILLE',1000,'ALB',100000,default);
Examen Capitulo 6
-----------------
01B. con CTAS solo se copian constr de NULL
02B. error si VARCHAR2 sin dimensi�n
03C. add new column ... T1 ADD ORDER_DATE DATE;
04BD. caract permitido nombres: # y $
05C. nombre invalidos porque comienzan por num y todos los identif (nombres) deben
comenzar con caracter alfanum y continuar con num o especial carac.
06Cok. lista tablas solo de usuario: C - USER_TABLES
07D. al a�adir una nueva colum con valor DEFAULT (SYSDATE) se rellena toda la
columna con dicho valor; se puede especificar NULL y NOT NULL
08B. si sumamos un 1 a una fecha implica 24 horas m�s, 0.5 12 horas, 0.25 6
horas...
09D. valor longitud por defecto de CHAR es 1
10A. borrar columna ALTER TABLE T1 DROP COLUMN COL1;
11CDE. con tabla read only se puede borrar constraint, indices y tabla
12CD. ... ADD CONSTRAINT PK_1 PRIMARY KEY () y ... ADD PRIMARY KEY () -> ambas cren
PK
ok: C y D - add/drop constraint siempre con ALTER TABLE
C. ALTER TABLE CITY ADD CONSTRAINT PK_CITY PRIMARY KEY (STATE_CD,
CITY_CD);
D. ALTER TABLE CITY ADD PRIMARY KEY (STATE_CD, CITY_CD);
13BC. en constraint CHECK no se pueden utilizar func (sysdate) ni subconsultas. Si
otras columnas y NULL, (si IN ('M','F'))
14ADG. AD: no DATE+DATE ni TS*5 (no se puede sum ni multip DT,TZ pero si restar
para encontrar la dif en dias);
G: se pueden sumar intervalos pero solo del mismo tipo. Multiplicaci�n y
divisi�n solo entre intervalos y del mismo tipo.
15okB. DEFERRABLE INITIALLY IMMEDIATE: chequeo de constraints con cada exec de
sentencia SQL pero se puede cambiar con SET CONSTRAINTS ALL DEFERRED
16okC. 6 default precision fraccion segundo TS. se puede cambiar de 0 a 9
17EerrC. solo TSZ muestran informaci�n formato largo time-zone; TSLZ lo ajusta pero
no lo muestra
18Cok. deshabilitar FK_ ; ... DISABLE CONSTRAINT FK_
Permite:
ALTER TABLE ORDERS DISABLE CONSTRAINT FK_ORDERS; -> deshabilita
ALTER TABLE ORDERS MODIFY CONSTRAINT FK_ORDERS ENABLE NOVALIDATE -> habilita
19C. para rename es valido: RENAME TABLE T1 TO T2 (solo cuando lo hace el
propietario) y ALTER TABLE T1 TO T2 (tablas de otro usu teniendo ALTER ANY TABLE)
20A. la tabla se crea correctamente: se permiten nombre col de un caracter, puede
convivir col LONG y LOB, los tipos se�alados no necesitan especificar tama�o.
No pueden haber 2 column tipo LONG / LONG RAW: ORA-01754: una tabla s�lo
puede contener una columna del tipo LONG
<TAB>------------
CAPITULO 7.- CREACION DE OTROS OBJETOS DE ESQUEMA
------------
Examen Capitulo 7
-----------------
01Bok. borrar vista: DROP VIEW USA_STATES;
02Aok. sobre cuantas tablas base de una vista unida pueden realizarse oper DML: UNA
03AerrD. vista creada sobre tabla sin primary key ni restricciones pero selec
subcon con DISTINCT; solo permite SELECT, no DML
04ABerrBE. modificar view definition: B-CREATE OR REPLACE VIEW E-CREATE OR
REPLACE VIEW FORCE
05Cok. si a�adimos nueva columna a una vista: hay que recompilar la vista usando
CREATE OR REPLACE View
06Bok. estado valido de constraint creada en vista: DISABLE NO VALIDATE
07Cok. si en vista dos campos number con distinta escala/precision se operan: el
campo resultante ser� de tipo Number
08Dok. subcon de vista no puede tener en el SELECT: FOR UPDATE OF; bloquea filas
por lo que no est� permitido
09Cok. TOP FIVE de salarios: select * from (...) where rownum <= 5;
10Dok. insert en vista con WHERE sin WITH CHECK OPTION: permite la insercci�n de
cualquier valor sin tener en cuenta el WHERE
11AFerrACEF. al modificar vista-join la definici�n no deber�a contener en el
top de la consulta:
A-DISTINC
C-aggregate function (SUM, AVG, COUNT)
E-GROUP BY
F-ROWNUM
13Aok. que sucece con un sin�nimo cuando el obj referenciado es borrado: el estado
del sino cambia a INVALIDO
14BerrD. borrar sino public: drop public synonym plan_table
Si no ponemos PUBLIC en el DROP se produce el siguiente error:
ORA-00955: este nombre ya lo est� utilizando otro objeto existente
15Cok. si error sequence KEY_SEQ.CURRVAL in not yet defined: solucion con SELECT
KEY_SEQ.NEXTVAL FROM DUAL;
16Dok. los indices BITMAP son idoneos: para columnas de baja y media cardinalidad.
17ACerr. que clausulas de SELECT pueden ser usadas por un indice: A.SELECT C.FROM
Se pueden utilizar ambas si el indice contiene todas las columnas de la
tabla.
18Dok. crear secuencia que empiece con 1000 asegurandose que no se salta ning�n
valor
D. Opciones:
A. CREATE SEQUENCE PRODUCT_KEY2 START WITH 1000 1 NOCACHE;
B. CREATE SEQUENCE PRODUCT_KEY2 START WITH 1000 INCREMENT BY 1
NOCACHE;
19Bok. mostrar el siguiente numero generado por una secuencia: select
emp_seq.currval from dual;
20Aok. crear secuencia que rote a los 10 valores: create sequence seq_01 cycle
maxvalue 100;