Vous êtes sur la page 1sur 6

SQL> CREATE USER ADMINISTRADOR IDENTIFIED BY ADMIN 2 DEFAULT TABLESPACE USERS 3 TEMPORARY TABLESPACE TEMP 4 QUOTA 500K ON USERS;

AVERIGUAR QUE PRIVILEGIOS TIEENE NUESTRO USUARIO select * from dba_role_privs where grantee='MALTEZ2'; AGREGAR PRIVILEGIO DE CREAR SESION; grant create session to MALTEZ2; AGREGAR ROL DE DBA; grant DBA to MALTEZ2; CREATE TABLE clientes (codigo INTEGER NOT NULL, nombre CHAR(30) NOT NULL, direccion CHAR(100), anotacion LONG, PRIMARY KEY (codigo)); // si deseo crear un indice para garantizar mas la unicidad de la llave primaria . No es necesario CREATE UNIQUE INDEX cliente_codigo ON clientes(cdigo); //voy a crear una secuencia para ir agregando el codigo del cliente CREATE SEQUENCE codigo_cliente INCREMENT BY 1 START WITH 1; CREATE TABLE ventas (codigo INTEGER NOT NULL, fecha DATE NOT NULL, articulo CHAR(10), valor NUMBER(6,2) NOT NULL CHECK (valor>0), FOREIGN KEY (codigo) REFERENCES clientes(codigo)); INSERT INTO CLIENTES VALUES( codigo_cliente.NEXTVAL, 'PINTURERIAS PROPIOS', 'Guatemela 1524', 'LIBRERIA' ); INSERT INTO CLIENTES VALUES( codigo_cliente.NEXTVAL, 'La QUE BUENA', 'Mazatenago Such', 'CARNICERIA' );

//codigo= secuencia //nombre //direccin //anotacin

TO_DATE('10/09/2013','DD/MM/YY'), // fecha SELECT codigo,nombre from clientes; UPDATE clientes SET telefono='234567', direccion='Andes 945' WHERE nombre='Feria del libro';

SQL>_ Escribir los mandatos de creacin de tablas, ndices y secuencia en un archivo (TABL AS.SQL) con el uso del editor. SQL>edit tablas Ejecutar los mandatos escritos en el archivo TABLAS.SQL SQL>@tablas Para salir de SQLPlus SQL>exit Otras tareas A continuacin examinaremos una serie de mandatos, a nivel de definicin de las tabl as, gracias a los cuales se puede: 1.- Listar estructuras de las tablas (DESCRIBE) 2.- Modificar la estructura de las tablas (ALTER TABLE) 3.- Eliminar una tabla (DROP TABLE) y para eliminar indeces DROP INDEX cliente_ codigo; 4.- Consultar las tablas del diccionario Detengmonos en los detalles ms significativos de cada una de dichas tareas: 1.- Listar estructura de las tablas (DESCRIBE) Para obtener la estructura (descripcin de una tabla) el mandato que se debe emple ar es: SQL>DESCRIBE clientes; 2.- Modificar la estructura de las tablas (ALTER TABLE) La modificacin de la estructura de las tablas con el uso de ALTER permite: - Aadir nuevas columnas. - Aadir restricciones a una columna, en este caso la tabla no debe contener datos . - Modificar el ancho de la columna. - Modificar el tipo de datos de la columna slo si la columna no contiene datos o est vaca. - Modificar al tipo LONG slo una columna sin restricciones. El siguiente ejemplo muestra cmo aadir, en la tabla Ventas, las columnas Factura ( para registrar el nmero de factura) y Cobro (tipo carcter con 2 posibles valores, N=NO cobrada, NULL=cobrada) y modificar la columna valor para ampliar su ancho. ALTER TABLE ventas ADD ( factura integer, cobro char ) MODIFY ( valor number(10,2) );

Ver tabla de ventas DESCRIBE 3.- Eliminar una tabla (DROP TABLE) 4.- Consultar las tablas del diccionario SQL>DESCRIBE ALL_TABLES; SQL>DESCRIBE all_indexes; SQL>DESCRIBE all_sequences; Crear Tabla de Auditoria. CREATE TABLE auditoria (codigo INTEGER NOT NULL, factura integer NOT NULL, username varchar2(10), fecha DATE NOT NULL, valor NUMBER(6,2) NOT NULL, PRIMARY KEY (codigo,factura)); Crear triger de auditoria al generar venta almacenado al generar venta despues d e insertar venta. CREATE OR REPLACE TRIGGER ventas_after_insert AFTER INSERT ON ventas FOR EACH ROW DECLARE v_username varchar2(10); BEGIN -- Busco el usuario o persona que esta haciendo la insersion en la tabla SELECT user INTO v_username FROM dual; -- Insert registro en la tabla auditoria. INSERT INTO auditoria ( codigo, factura, valor, fecha, username ) VALUES ( :new.codigo, :new.factura, :new.valor, :new.fecha, v_username ); END; / CREATE OR REPLACE TRIGGER "ALONSO"."INSERCIONNUMEROMAYOR1000" AFTER INSERT ON "ALONSO"."PRUEBA" FOR EACH ROW WHEN (new.CAMPO2 > 1000) BEGIN insert into resultadodisparador (fecha, aviso, tabla)

values (Sysdate, 'Registro con CAMPO2 superior a 1000', 'PRUEBA'); END;

PROCEDIMIENO ALMACENADO TRANSACCIONAL CREATE OR REPLACE Procedure UPDATEVENTAS ( prm_codigo IN integer ) DECLARE CURSOR c1 IS SELECT VALOR FROM ventas WHERE codigo = prm_codigo; v_valor NUMBER(8,2); BEGIN OPEN C1; LOOP FETCH C1 INTO v_valor; EXIT WHEN C1%NOTFOUND; if v_valor<100 then UPDATE ventas SET valor = valor + 1200 WHERE codigo= c1; end if; if v_valor>=100 then UPDATE ventas SET valor = valor + 1200 WHERE Codigo= c1; end if; END LOOP; CLOSE c1; commit; END; / El siguiente ejemplo muestra una supuesta transaccin bancaria. DECLARE x NUMBER :=0; y NUMBER := 3; res NUMBER; BEGIN res:=y/x; DBMS_OUTPUT.PUT_LINE(res); EXCEPTION WHEN ZERO_DIVIDE THEN DBMS_OUTPUT.PUT_LINE('No se puede dividir por cero') ; WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error inesperado') ; END; DECLARE importe NUMBER; ctaOrigen VARCHAR2(23); ctaDestino VARCHAR2(23);

BEGIN importe := 100; ctaOrigen := '2530 10 2000 1234567890'; ctaDestino := '2532 10 2010 0987654321'; UPDATE CUENTAS SET SALDO = SALDO - importe WHERE CUENTA = ctaOrigen; UPDATE CUENTAS SET SALDO = SALDO + importe WHERE CUENTA = ctaDestino; INSERT INTO MOVIMIENTOS (CUENTA_ORIGEN, CUENTA_DESTINO,IMPORTE, FECHA_MOVIMIENTO) VALUES (ctaOrigen, ctaDestino, importe*(-1), SYSDATE); INSERT INTO MOVIMIENTOS (CUENTA_ORIGEN, CUENTA_DESTINO,IMPORTE, FECHA_MOVIMIENTO) VALUES (ctaDestino,ctaOrigen, importe, SYSDATE); COMMIT; EXCEPTION WHEN OTHERS THEN dbms_output.put_line('Error en la transaccion:'||SQLERRM); dbms_output.put_line('Se deshacen las modificaciones); ROLLBACK; END; CREATE OR REPLACE PROCEDURE P_ADMINISTRADORES (COD_ADMINISTRADOR VARCHAR2) IS BEGIN DECLARE CURSOR C_LISTADO_ADMINISTRADORES IS SELECT saldo FROM ADMINISTRADOR WHERE CODIGO_ADMIN=COD_ADMINISTRADOR; S ADMINISTRADOR%ROWTYPE; BEGIN OPEN C_LISTADO_ADMINISTRADORES; LOOP FETCH C_LISTADO_ADMINISTRADORES INTO S; EXIT WHEN C_LISTADO_ADMINISTRADORES%NOTFOUND; dbms_output.put_line('COD ADMIN: ' || S.CODIGO_ADMIN || ' - NOMBRE/APEL LIDO: ' || S.NOMBRE1_ADMIN || ' ' || S.NOMBRE2_ADMIN || ' ' || S.APELLIDO1_ADMIN || ' ' || S.APELLIDO2_ADMIN || ' - DIRECCION: ' || S.DIRECCION_ADMIN || ' - TELEFONO: ' || S.TELEFONO_ADMIN || ' - EMAIL: ' || S.EMAIL_ADMIN); END LOOP; CLOSE C_LISTADO_ADMINISTRADORES; END; END; /

CREATE OR REPLACE Procedure UpdateCourse ( name_in IN varchar2 ) IS cnumber number; cursor c1 is select course_number from courses_tbl where course_name = name_in; BEGIN open c1;

fetch c1 into cnumber; if c1%notfound then cnumber := 9999; end if; insert into student_courses ( course_name, course_number) values ( name_in, cnumber ); commit; close c1; EXCEPTION WHEN OTHERS THEN raise_application_error(-20001,'An error was encountered - '||SQLCODE||' ERROR- '||SQLERRM); END;

Paquete de procedimientos PACKAGE employees_qp IS FUNCTION last_name (id_in IN employees.employee_id%TYPE) RETURN employees.last_name%TYPE; END employees_qp; PROCEDURE process_employee (id_in IN employees.employee_id%TYPE) IS l_last_name employees.last_name%TYPE; BEGIN l_last_name := employees_qp.last_name (id_in); END process_employee;

Vous aimerez peut-être aussi