Manual de Comandos ORACLE 10G

17
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

Transcript of Manual de Comandos ORACLE 10G

Page 1: 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

Page 2: Manual de Comandos ORACLE 10G

{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;-

Page 3: Manual de Comandos ORACLE 10G

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

Page 4: Manual de Comandos ORACLE 10G

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

Page 5: Manual de Comandos ORACLE 10G

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

Page 6: Manual de Comandos ORACLE 10G

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));

Page 7: Manual de Comandos ORACLE 10G

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…}

Page 8: Manual de Comandos ORACLE 10G

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…}

Page 9: Manual de Comandos ORACLE 10G

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),

Page 10: Manual de Comandos ORACLE 10G

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)

Page 11: Manual de Comandos ORACLE 10G

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:

Page 12: Manual de Comandos ORACLE 10G

{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…

Page 13: Manual de Comandos ORACLE 10G

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

Page 14: Manual de Comandos ORACLE 10G

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

Page 15: Manual de Comandos ORACLE 10G

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

Page 16: Manual de Comandos ORACLE 10G

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:

Page 17: Manual de Comandos ORACLE 10G

{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