Manual de Comandos ORACLE 10G
-
Upload
david-santillan-ramos -
Category
Documents
-
view
33 -
download
0
Transcript of Manual de Comandos ORACLE 10G
Manual de Comandos ORACLE 10G
Introducción a consultas
Consultas simples:
SELECT campo FROM tabla;
Consulta simple con condición:
SELECT campo1, campo2, FROM tablaDeArticulos WHERE precio>10;
Consultas con subconsultas:
SELECT precio FROM tablaDeArticulos WHERE referencia = (SELECT referencia FROM tablaDeReferencias WHERE nombreArticulo =’ patinete ‘)
Operadores: +, -, *, /
12*(sal+100)
Alias: Renombra encabezado, pone nombres a las columnas resultantes de una consulta
,SELECT ename “Nombre trabajador”, sal “Salario” FROM trabajadores;}
Concatenación: “||” Concatena columnas o cadenas.
,SELECT ename||job “Empleados”;-
,SELECT ename ||’ es un ‘|| job “Detalles”;-
Filas Duplicadas: “distinct” no muestra duplicadas, despues de SELECT
{SELECT distinct deptno, job;}
Visualizar estructura completa de una tabla: desc
{desc dept;}
Ficheros:
sav[e] guarda consulta
{sav archiv.sql}
@ ejecuta consultas en fichero / sta[rt] ejecuta consultas en fichero
{@ arciv.sql}
ed[it] permite editar fichero
{ed archiv.sql}
Operador WHERE: Restringe la consulta a las filas que cumple una condición
FROM emp WHERE job=’CLERK’ (CASE SENSITIVE!!)
Operadores comparación: =, >, >=, <, <=, <>
{SELECT campo FROM table WHERE salario>=200;}
,…WHERE hiredate < ’01-01-95′;-
,…WHERE hiredate > ’01-JAN-95′;-
Operadores comparación 2: BETWEEN..AND.., IN(list), LIKE, IS NULL
BETWEEN:
,… WHERE salario BETWEEN 100 AND 150;-
IN:
,mgr IN (7902, 7566);- ,WHERE ename IN (‘FORD , ‘ALLEN’)-
LIKE: Comodin “%” representa 0 o N caracteres. Comodin “_” representa exactamente 1 caracter.
,…WHERE ename LIKE ‘_S%’-
ESCAPE: Interpreta “_” literal.
,…WHERE ename LIKE ‘%\_%’ ESCAPE ‘\’;-
IS NULL: Si un valor es nulo . Atencion, NULL! =0!!
,…WHERE mgr IS NULL;-
Operadores Lógicos: AND, OR, NOT
,…WHERE job NOT IN (‘CLERK’, ‘MANAGER’); job NOT LIKE ‘%A_’;-
Ordenar: “ORDER BY (columna/alias)”. Ordenar de forma ascendente o descendente: “ORDER BY (columna/alias) *ASC/DESC+“
ORDER BY hiredate desc; ORDER BY deptno, sal desc;
Funciones de caracteres:
LOWER/UPPER: Convierte a minusculas/mayúsculas
lower(JOB) -> job
ename=upper(‘blake’);
INITCAP: Primera letra mayusculas resto minusculas
Initcap(JOB) -> Job
CONCAT: Concatena (como “|”)
SUBSTR: Devuelve los caracteres seleccionados de una cadena de la cadena
LENGTH: Devuelve número caracteres
INSTR: Devuelve posición del caracter en la cadena
LPAD: Rellena cadena por la derecha con el car seleccionado
TRIM: Elimina caracteres del principio o del final
Funciones Numéricas:
Round: Redondea al decimal especificado
round(45.926, 2) -> 45.93
Trunc: Trunca en le decimal especificado
trunc(45.926, 2) -> 45.92
Mod: Devuelve el resto de la división
Mod(1600, 300) -> 100
Mod(sal, comm) -> Calcula el “RATIO”
Fechas:
sysdate: devuelve fecha y hora actual
num + fecha = fecha
fecha – num = fecha
fecha – fecha = dias
num/24 + fecha = agrega horas
{SELECT (sysdate-hiredate)/7 SEMANAS}
Conversión:
to_char: to_car(date, ‘fmt’), (hiredate, ‘fmDD’)
fm: elimina espacios en blanco
to_number: to_number(char)
to_date: Guarda datos en formato de fecha
to_date(char[, 'fmt'])
to_date(’07/05/1984′)
SELECT to_char(sysdate,’MM’) FROM dual;
Elementos:
YYYY: Año numérico
YEAR: Año letras
MM: Mes numérico
MONTH: Mes letras
DY: Abreviatura 3 letras día
DAY: Nombre completo
Hora: HH24:MI:SS AM -> 15:45:32 PM
Añadir cars: DD “of” MONT -> 12 of October
Nº dia en letras: ddspth -> fourteenth
NVL: Convierte un nulo a un valor
nvl(comm, 0), nvl(job, ‘No Job’), nvl(hiredate,’01-JAN-97′)
,SELECT ename, nvl(to_car(mgr), ‘No Manager’) FROM emp;-
DECODE: Función de CASE
SELECT job, sal,
decode(job, ‘ANALYST’, sal*1.1, ‘CLERK’, sal*2, sal)
FROM emp;
Funciones de grupo:
AVG: Media
COUNT: Cantidad de filas
MAX: Valor maximo
MIN: Valor mimimo ignorando nulos
STDDEV: Desviación ignorando nulos
SUM: Suma de valores ignorando nulos
VARIANCE: Varianza ignorando nulos
NOTA: Se pueden utilizar sin aparecer en SELECT
SELECT deptno FROM emp GROUP BY deptno HAVING MAX(sal)>1
Ver tablas creadas:
{SELECT * FROM data_dictionary}
Dónde data_dictionary puede ser:
DBA_TABLES: Contiene todas las tablas de la base de datos ALL_TABLES: Contiene todas las tablas accesibles por el usuario (las propias más las que tiene permisos sobre ellas) USER_TABLES: Contiene totas las tablas del usuario DBA_SEGMENTS: Contiene todos los segmentos de la base de datos, esto incluye tablas, indices y segmentos de rollback entre otros.
SELECT * FROM USER_TABLES;
Insertar registros en una tabla: Caracteres y fechas entre comillas simples
{INSERT INTO tabla [] VALUES []}
INSERT INTO tab (dnum, depnam, hiredate, usr_actual)
VALUES (50, ‘DEVELOPMENT’, SYSDATE, USERID);
Insertar registros nulos:
INSERT INTO dept VALUES (70, ‘FINANCE’, NULL);
Creación de Scripts: Los scripts nos permiten crear sencillas aplicaciones para añadir datos de forma sencilla a nuestra base de datos.
{ACCEPT variable PROMPT ‘texto a mostrar’ INSERT INTO tabla *+ VALUES*&variable+}
ACCEPT id PROMPT ‘Introduce el ID de usuario:’
ACCEPT last_name prompt ‘Introduce apellido del usuario:’
ACCEPT first_name prompt ‘Introduce nombre del usuario:’
INSERT INTO my_employee (id, LAST_NAME, FIRST_NAME, USERID)
VALUES (&id, ‘&last_name’, ‘&first_name’, substr(‘&first_name’,1,1) || substr(‘$last_name’,1,7));
Insertar registros de otra tabla:
{INSERT INTO tabla *+ select(…)}
INSERT INTO managers(id, name, salary, hiredate)
SELECT empno, ename, sal, hiredate FROM emp WHERE job = ‘MANAGER’
Modificación de registros:
{UPDATE tabla SET column = value where…}
UPDATE emp SET deptno = 20 WHERE empno = 7782;
UPDATE emp SET (job,deptno) = (SELECT job, deptno from…)
Eliminar registros:
{DELETE FROM tabla WHERE condición}
DELETE FROM department WHERE dname = ‘DEVELOPMENT’
DELETE FROM employee WHERE deptno = (SELECT deptno from…)
Control transacciones:
COMMIT: Confirmar cambios realizados en la base de datos
ROLLBACK: Deshacer todos los cambios realizados en la base de datos
SAVEPOINT nombre: Crear punto de guardado
ROLLBACK TO nombre: Volver a punto de guardado
Creación de tablas:
{CREATE TABLE tabla (columna tipo(longitud), columna..)}
Tipos: NUMBER, VARCHAR2, DATE, NUMBER(dcimal,digit)
CREATE TABLE dept (deptno NUMBER(2) NOT NULL, name VARCHAR2(50));
Crear tabla a partir de otra (por subconsulta):
{CREATE TABLE tabla AS SELECT…}
CREATE TABLE departamento AS SELECT empno, ename “Nombre Departamento”, sal FROM dept;
Modificar tabla:
-Añadir columnas:
{ALTER TABLE tabla ADD (columna1 tipo(), columna2 tipo()…);}
ALTER TABLE dept add (job VARCHAR2(9));
-Modificar columnas existentes:
{ALTER TABLE tabla MODIFY (col1 tipo() [DEFAULT expr]);}
ALTER TABLE empl modify (name VARCHAR2(50) DEFAULT ‘Nom’);
Eliminar columna:
{ALTER TABLE tabla DROP COLUMN columna;}
ALTER TABLE dept DROP COLUMN dname;
Notificar columna como no usada:
{ALTER TABLE tabla SET UNUSED (columna)}
ALTER TABLE dept SET UNUSED (loc);
Eliminar columnas marcadas como no usadas:
{ALTER TABLE tabla DROP UNUSED COLUMNS;}
ALTER TABLE dept DROP UNUSED COLUMNS;
Eliminar tabla:
{DROP TABLE table;}
DROP TABLE dept;
Modificar nombre de objeto (tabla, vista…):
{RENAME tabla/vista… TO tabla/vista…}
RENAME dept TO departmento;
Eliminar todos los registros (TRUNCAR):
{TRUNCATE TABLE tabla;}
TRUNCATE TABLE dept;
Añadir comentarios a una tabla:
{COMMENT ON TABLE/COLUMN table/columna IS ‘comentario’;}
COMMENT ON TABLE emp IS ‘Employee Infromation’
COMMENT ON COLUMN TABLE.column IS ‘comentario’
COMMENT ON COLUMN emp.ename IS ‘Nombre trabajador’
Definición de constraints (restricciones):
{CREATE TABLE tabla
(columna tipo() [default expr] CONSTRAINT [nombre] tipo (columna));}
-Nivel de tabla:
CREATE TABLE emp(
(empno NUMBER(4),
ename VARCAHR2(10),
deptno NUMBER(2),
CONSTRAINT emp_empno_pk
PRIMARY KEY (empono));
- Nivel de columna:
CREATE TABLE emp(
(empno NUMBER(4) [CONSTRAINT emp_empno_nn] NOT NULL,
ename VARCAHR2(10),
deptno NUMBER(2) NOT NULL);
Constraints (tipos y situación):
NOT NULL (Nivel de columna)
CREATE TABLE emp(
(empno NUMBER(4) [CONSTRAINT emp_empno_nn] NOT NULL,
ename VARCAHR2(10),
deptno NUMBER(2) NOT NULL);
UNIQUE (Columna o tabla)
CREATE TABLE dept
(dname VARCHAR(14),
…
CONSTRAINT dept_dname_uk UNIQUE(dname));
PRIMARY KEY (Columna o tabla) -> PK lleva implícito UNIQUE
CREATE TABLE dept
(deptno NUMBER(2),
…
CONSTRAINT dept_deptno_pk PRIMERY KEY (deptno));
FOREIGN KEY (Columna o tabla)
CREATE TABLE emp
(ename VARCAHR2(10) NOT NULL,
deptno NUMBER(7,2) NOT NULL,
…
CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno)
REFERENCES dept (deptno));
CHECK -Condicion- (Columna o tabla)
CREATE TABLE emp
(deptno NUMBER(2),
CONSTRAINT emp_deptno_ck CHECK (deptno between 10 and 99));
Añadir CONSTRAINT (restricción) a tabla existente:
{ALTER TABLE tabla add/modify [CONSTRAINT CONSTRAINT] type (col);}
Podemos añadir restricción NOT NULL con MODIFY
Podemos añadir o borrar CONSTRAINTs pero NO modificar. Para modificar
eliminar y volver a crear
ALTER TABLE emp add CONSTRAINT emp_mgr_fk
FOREING KEY(mgr) REFERENCES emp(empno);
Eliminación de restricciones (CONSTRAINTs):
{ALTER TABLE tabla DROP CONSTRAINT CONSTRAINT;}
ALTER TABLE emp DROP CONSTRAINT emp_mgr_fk;
Borrar CONSTRAINT PK y (FK de tabla dependiente de otra usando-CASCADE-)
{ALTER TABLE tabla DROP primary key CASCADE;}
ALTER TABLE dept DROP primary key cascade;
Eliminación de restricciones en cascada: Es usado para eliminar PK u otras con dependencias
{ALTER TABLE tabla DROP (constraint) cascade CONSTRAINT;}
ALTER TABLE dept DROP (deptno) cascade CONSTRAINTS;
Desactivar constraint:
{ALTER TABLE tabla DISABLE CONSTRAINT constraint [CASCADE];}
ALTER TABLE emp disable CONSTRAINT emp_empno_pk CASCADE;
Activar constraints:
{ALTER TABLE tabla ENABLE CONSTRAINT CONSTRAINT;}
ALTER TABLE emp ENABLE CONSTRAINT emp_empno_pk;
Creación de vistas:
{CREATE VIEW vista AS SELECT…}
[with check option CONSTRAINT CONSTRAINT]
[with read only]
CREATE view empvu10 as select empno “nº empleado”,
job from emp where deptno=10;
Modificación de vistas:
{CREATE OR REPLACE VIEW vista *(colname, colname, colname)+ as select…}
Nota: Los alias de columna se puede poner en SELECT o en CREATE
CREATE or replace view empvu10
(employee_number, employee_name, job_title)
as select empno, ename, job from emp where deptno = 10;
Creación vistas complejas con funciones de grupo para ver 2 tablas:
{CREATE view dept_sum_vu (name, minsal, maxsal, avgsal)
as select d.dname, MIN(e.sal), MAX(e.sal), AVG(e.sal)
from emp e, dept d where e.deptno = d.deptno group by d.dname}
With check option:
CREATE or replace view vista as select…
with check option CONSTRAINT CONSTRAINT
With read only:
CREATE or replace view vista as select…
with read only;
Nota: En este caso no podemos quitar, insertar o modificar la vista
Eliminación de vistas:
{DROP view vista;}
Creación de vistas inline:
{SELECT … FROM tabla a(SELECT…) b where…}
SELECT tablaA.ename, tablaA.sal, tablaA.deptno, tablaB.maxsal
from emp tablaA, (select deptno, max(sal) from emp group by deptno) tablaB
where tablaA.deptno = tablaB.deptno and tablaA.sal < tablaB.maxsal
Obtener los N primeros/últimos datos de una tabla (Top-N):
{SELECT ROWNUM *as alias+ FROM (SELECT… FROM tabla WHERE… ORDER BY Top-NCol)
where ROWNUM <= N}
SELECT ROWNUM as RANKING, ename, sal
from (select ename, sal from emp order by sal desc)
where rownum <=3;
Creación de secuencias:
CREATE/ALTER sequence secuencia
increment by n
start with n (no en ALTER)
maxvalue n
minvalue n
cycle (continua generando despues de max)
cache n (memoria oracle)
Insertar valores de una secuencia en una tabla:
INSERT INTO tabla (valorActual, valorSiguiente)
VALUES (secuencia.currval, secuencia.nextval)
Eliminar secuencias:
{DROP sequence secuencia;}
Crear índices:
{CREATE index indice on tabla (col, col+10, upper(ename)…)}
Eliminar índices:
{DROP index índice}
Crear sinonimos:
{CREATE [public] SYNONYM sinonimo FOR objecto}
CREATE public synonym dept for sis228.dept
Eliminar sinónimos:
{DROP SYNONYM sinónimo}
Crear usuarios de Oracle: {CREATE USER nombre IDENTIFIED BY contraseña DEFAULT TABLESPACE nombreTableSpace TEMPORARY TABLESPACE nombreTemp}
CREATE USER sis2dba
IDENTIFIED BY sis2dbapass / EXTERNALLY
DEFAULT TABLESPACE sis2tabla
TEMPORARY TALESPACE sis2temp
QUOTA INT [K|M] UNLIMITED ON NOMBRETABLESPACE
PASSWORD EXPIRE
ACCOUNT [LOCK | UNLOCK]
Modificar nombre de usuarios Oracle:
{ALTER USER NombreUsuario Modificación;}
ALTER USER sis2dba QUOTA UNLIMITED ON sis2tabla;
Borrar usuarios:
{DROP USER nombre CASCADE}
Nota: CASCADE nos indica que vamos a borrar también TOdos sus objeTOs
Permitir conexión y crear tablas:
{GRANT CONNECT, RESOURCE TO nombre}
Nota: Para que un usuario de Oracle pueda crear objeTOs NECESITA el permiso RESOURCE
Conceder permisos de DBA:
{GRANT DBA TO NombreUsuario}
PERMISOS:
Permiso Tabla Vista Secuencia ProcedimienTO alter X
X
delete X X
execute
X
insert X X
SELECT X X X
update X X
Conceder permisos:
{GRANT permiso1, permiso 2… ON objeTO TO nombreUsuario *ROLE+}
GRANT SELECT ON emp TO sis226
GRANT SELECT, INSERT, UPDATE ON emp TO public
GRANT permiso1, permiso2… ON objeTO TO nombreUsuario WITH GRANT OPTION
Nota: GRANT OPTION nos permite conceder permisos a otros usuarios
Quitar permiso:
,REVOKE permiso1,… ON objeTO TO nombreUsuario-
REVOKE permiso1 ON SELECT TO sis226
Nota: Se quita los permisos a sis226 y a TOdos a los que sis226 he dado permisos
Conceder permisos de Sistema:
{GRANT permiso1, permiso2… ANY TABLE TO NombreUsuario}
GRANT CREATE, SELECT ANY TABLE TO sis226
GRANT permiso1, permiso2… ANY TABLE TO NombreUsuario WITH ADMIN OPTION
Nota: WITH ADMIN OPTION permite dar permisos de sistema a otros usuarios
Quitar permiso de Sistema:
{REVOKE permiso1, permiso2… ANY TABLE FROM NombreUsuario}
REVOKE SELECT ANY TABLE FROM sis226
Nota: Quita los permisos a sis226 pero NO a los que sis226 ha dado
ROLES:
Un ROLE es una agrupación de permisos con lo cual podemos juntar ciertos permisos en un rol y dárselo a un usuario o grupo de usuarios.
Creación de ROLEs:
{CREATE ROLE nombreRol [IDENTIFIED BY Contraseña];}
CREATE ROLE scott_rol;
Borrar ROLEs:
{DROP ROLE nombreRol;}
Dar permisos a ROLEs:
GRANT SELECT, UPDATE ON scott.emp TO scott_rol;
GRANT SELECT, INSERT, DELETE, UPDATE ON scott.dept TO scott_rol;
GRANT SELECT ON scott.salgrade TO scott_rol;
GRANT SELECT ON scott.bonus TO scott_rol;
Conceder rol a usuario:
{GRANT role TO usuario}
GRANT scott_rol TO sis226
Modificar ROLEs:
{GRANT Permiso1,… ON nombreUsuario TO ROLE;}
GRANT SELECT on scott.dept TO scott_rol ;
Nota: SOLO modifica la linea del scott.dept