ASGBD: add SQL samples
Signed-off-by: Nicolás A. Ortega Froysa <nicolas@ortegas.org>
This commit is contained in:
		
							
								
								
									
										14
									
								
								2/ASGBD/samples/alter-table-script.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								2/ASGBD/samples/alter-table-script.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
DECLARE
 | 
			
		||||
    tbl_name USER_TABLES.TABLE_NAME%type;
 | 
			
		||||
    CURSOR table_cursor IS SELECT TABLE_NAME FROM USER_TABLES;
 | 
			
		||||
BEGIN
 | 
			
		||||
    OPEN table_cursor;
 | 
			
		||||
    LOOP
 | 
			
		||||
        FETCH table_cursor INTO tbl_name;
 | 
			
		||||
        EXIT WHEN table_cursor%NOTFOUND;
 | 
			
		||||
        dbms_output.put_line('ALTER TABLE ' || tbl_name || ' ADD fecha_creacion DATE;');
 | 
			
		||||
        dbms_output.put_line('ALTER TABLE ' || tbl_name || ' ADD usuario_creacion VARCHAR2(32);');
 | 
			
		||||
    END LOOP;
 | 
			
		||||
    CLOSE table_cursor;
 | 
			
		||||
END;
 | 
			
		||||
/
 | 
			
		||||
							
								
								
									
										16
									
								
								2/ASGBD/samples/count-plsql.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								2/ASGBD/samples/count-plsql.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
DECLARE
 | 
			
		||||
    office_id oficina.codigo_oficina%type;
 | 
			
		||||
    cnt INT;
 | 
			
		||||
    CURSOR my_cursor IS
 | 
			
		||||
        SELECT codigo_oficina FROM oficina;
 | 
			
		||||
BEGIN
 | 
			
		||||
    cnt := 0;
 | 
			
		||||
    OPEN my_cursor;
 | 
			
		||||
    LOOP
 | 
			
		||||
        FETCH my_cursor INTO office_id;
 | 
			
		||||
        EXIT WHEN my_cursor%NOTFOUND;
 | 
			
		||||
        cnt := cnt + 1;
 | 
			
		||||
    END LOOP;
 | 
			
		||||
    dbms_output.put_line(cnt);
 | 
			
		||||
    CLOSE my_cursor;
 | 
			
		||||
END;
 | 
			
		||||
							
								
								
									
										2
									
								
								2/ASGBD/samples/db-alter-session.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								2/ASGBD/samples/db-alter-session.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
alter session set "_ORACLE_SCRIPT"=true;
 | 
			
		||||
set serveroutput on;
 | 
			
		||||
							
								
								
									
										38
									
								
								2/ASGBD/samples/fecha-y-stock.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								2/ASGBD/samples/fecha-y-stock.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
alter session set "_ORACLE_SCRIPT"=true;
 | 
			
		||||
set serveroutput on;
 | 
			
		||||
 | 
			
		||||
CREATE TABLE PEDIDOS_COPIA AS (SELECT * FROM PEDIDOS);
 | 
			
		||||
 | 
			
		||||
DROP TRIGGER PEDIDO_LLEGA_TARDE;
 | 
			
		||||
 | 
			
		||||
CREATE OR REPLACE TRIGGER PEDIDO_LLEGA_TARDE
 | 
			
		||||
    --AFTER
 | 
			
		||||
    BEFORE
 | 
			
		||||
    INSERT OR UPDATE OF FECHAESPERADA OR UPDATE OF FECHAENTREGA
 | 
			
		||||
    ON PEDIDOS_COPIA
 | 
			
		||||
    FOR EACH ROW
 | 
			
		||||
BEGIN
 | 
			
		||||
    IF :NEW.FECHAESPERADA < :NEW.FECHAENTREGA
 | 
			
		||||
    THEN
 | 
			
		||||
        :NEW.COMENTARIOS := 'Pedido con retraso';
 | 
			
		||||
        --UPDATE PEDIDOS_COPIA SET COMENTARIOS='Pedido con retraso' WHERE CODIGOPEDIDO=:NEW.CODIGOPEDIDO;
 | 
			
		||||
    END IF;
 | 
			
		||||
END;
 | 
			
		||||
/
 | 
			
		||||
 | 
			
		||||
CREATE OR REPLACE TRIGGER PRODUCTO_SIN_STOCK
 | 
			
		||||
    BEFORE
 | 
			
		||||
    INSERT OR UPDATE OF CODIGOPRODUCTO OR UPDATE OF CANTIDAD
 | 
			
		||||
    ON DETALLEPEDIDOS
 | 
			
		||||
    FOR EACH ROW
 | 
			
		||||
DECLARE
 | 
			
		||||
    STOCK PRODUCTOS.CANTIDADENSTOCK%type;
 | 
			
		||||
BEGIN
 | 
			
		||||
    SELECT CANTIDADENSTOCK INTO STOCK FROM PRODUCTOS WHERE CODIGOPRODUCTO=:NEW.CODIGOPRODUCTO;
 | 
			
		||||
 | 
			
		||||
    IF STOCK < :NEW.CANTIDAD
 | 
			
		||||
    THEN
 | 
			
		||||
        raise_application_error(-20669, 'Not enough of product in stock.');
 | 
			
		||||
    END IF;
 | 
			
		||||
END;
 | 
			
		||||
/
 | 
			
		||||
							
								
								
									
										62
									
								
								2/ASGBD/samples/ortega_froysa_nicolas.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								2/ASGBD/samples/ortega_froysa_nicolas.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
/* Nicol<6F>s A. Ortega Froysa*/
 | 
			
		||||
ALTER SESSION SET "_ORACLE_SCRIPT" = TRUE;
 | 
			
		||||
 | 
			
		||||
CREATE TABLESPACE TBSP_COMERCIAL
 | 
			
		||||
    DATAFILE 'C:\ABD\TS\tbsp_comercial.dbf'
 | 
			
		||||
    SIZE 1M;
 | 
			
		||||
CREATE TABLESPACE TBSP_FABRICA
 | 
			
		||||
    DATAFILE 'C:\ABD\TS\tbsp_fabrica.dbf'
 | 
			
		||||
    SIZE 1M;
 | 
			
		||||
 | 
			
		||||
CREATE USER COMERCIAL IDENTIFIED BY COMERCIAL
 | 
			
		||||
    DEFAULT TABLESPACE TBSP_COMERCIAL;
 | 
			
		||||
CREATE USER FABRICA IDENTIFIED BY FABRICA
 | 
			
		||||
    DEFAULT TABLESPACE TBSP_FABRICA;
 | 
			
		||||
 | 
			
		||||
DROP TABLE COMERCIAL.clientes;
 | 
			
		||||
CREATE TABLE COMERCIAL.clientes(
 | 
			
		||||
    codigo INT,
 | 
			
		||||
    nombre VARCHAR(50),
 | 
			
		||||
    fecha_registro DATE);
 | 
			
		||||
 | 
			
		||||
CREATE TABLESPACE TBSP_PEDIDOS
 | 
			
		||||
    DATAFILE 'C:\ABD\TS\tbsp_pedidos.dbf'
 | 
			
		||||
    SIZE 1M
 | 
			
		||||
    AUTOEXTEND ON MAXSIZE 10M;
 | 
			
		||||
 | 
			
		||||
DROP TABLE COMERCIAL.pedidos;
 | 
			
		||||
CREATE TABLE COMERCIAL.pedidos(
 | 
			
		||||
    num_pedido INT,
 | 
			
		||||
    cliente_codigo INT,
 | 
			
		||||
    articulo_codigo VARCHAR2(20),
 | 
			
		||||
    precio_total NUMBER,
 | 
			
		||||
    fecha_pedido DATE) TABLESPACE TBSP_PEDIDOS;
 | 
			
		||||
 | 
			
		||||
DROP TABLE FABRICA.articulos;
 | 
			
		||||
CREATE TABLE FABRICA.articulos(
 | 
			
		||||
    codigo_articulo VARCHAR2(20),
 | 
			
		||||
    fecha_registro_cliente DATE,
 | 
			
		||||
    nombre VARCHAR2(20) NOT NULL,
 | 
			
		||||
    precio NUMBER(2),
 | 
			
		||||
    fecha_pedido DATE);
 | 
			
		||||
 | 
			
		||||
REVOKE ALL ON COMERCIAL.pedidos FROM PUBLIC;
 | 
			
		||||
GRANT READ ON COMERCIAL.pedidos TO COMERCIAL;
 | 
			
		||||
 | 
			
		||||
REVOKE ALL ON COMERCIAL.clientes FROM FABRICA;
 | 
			
		||||
 | 
			
		||||
GRANT READ,INSERT,UPDATE,DELETE ON FABRICA.articulos TO COMERCIAL
 | 
			
		||||
    WITH GRANT OPTION;
 | 
			
		||||
 | 
			
		||||
CREATE USER JEFE_COMERCIAL
 | 
			
		||||
    IDENTIFIED BY JEFE_COMERCIAL
 | 
			
		||||
    DEFAULT TABLESPACE TBSP_COMERCIAL;
 | 
			
		||||
GRANT ALL ON COMERCIAL.pedidos TO JEFE_COMERCIAL
 | 
			
		||||
    WITH GRANT OPTION;
 | 
			
		||||
GRANT ALL ON COMERCIAL.clientes TO JEFE_COMERCIAL
 | 
			
		||||
    WITH GRANT OPTION;
 | 
			
		||||
 | 
			
		||||
SELECT c.nombre, SUM(p.precio_total)
 | 
			
		||||
    FROM COMERCIAL.pedidos p
 | 
			
		||||
    JOIN COMERCIAL.clientes c ON p.cliente_codigo=c.codigo
 | 
			
		||||
    GROUP BY c.nombre;
 | 
			
		||||
							
								
								
									
										38
									
								
								2/ASGBD/samples/trigger-sess.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								2/ASGBD/samples/trigger-sess.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
CREATE OR REPLACE TRIGGER only_sales_comm
 | 
			
		||||
    BEFORE INSERT OR UPDATE
 | 
			
		||||
    ON EMP_COPIA
 | 
			
		||||
    FOR EACH ROW
 | 
			
		||||
BEGIN
 | 
			
		||||
    IF UPPER(:NEW.job) != 'SALESMAN' AND :NEW.comm IS NOT NULL
 | 
			
		||||
    THEN
 | 
			
		||||
        raise_application_error(-20669, 'Comm only allowed if SALESMAN');
 | 
			
		||||
    END IF;
 | 
			
		||||
END;
 | 
			
		||||
/
 | 
			
		||||
 | 
			
		||||
CREATE TABLE EMP_COPIA AS (SELECT * FROM EMP);
 | 
			
		||||
 | 
			
		||||
SELECT * FROM EMP_COPIA;
 | 
			
		||||
 | 
			
		||||
UPDATE EMP_COPIA SET COMM=72 WHERE EMPNO=7782;
 | 
			
		||||
 | 
			
		||||
CREATE OR REPLACE TRIGGER sal_range
 | 
			
		||||
    BEFORE INSERT OR UPDATE
 | 
			
		||||
    ON EMP_COPIA
 | 
			
		||||
    FOR EACH ROW
 | 
			
		||||
BEGIN
 | 
			
		||||
    IF UPPER(:NEW.JOB) = 'CLERK' AND :NEW.SAL NOT BETWEEN 800 AND 1100
 | 
			
		||||
 | 
			
		||||
    THEN
 | 
			
		||||
        raise_application_error(-20669, 'Clerk salary must be between 800-1100');
 | 
			
		||||
    ELSIF UPPER(:NEW.JOB) = 'ANALYST' AND :NEW.SAL NOT BETWEEN 1200 AND 1600
 | 
			
		||||
    THEN
 | 
			
		||||
        raise_application_error(-20669, 'Analyst salary must be between 1200-1600');
 | 
			
		||||
    ELSIF UPPER(:NEW.JOB) = 'MANAGER' AND :NEW.SAL NOT BETWEEN 1800 AND 2000
 | 
			
		||||
    THEN
 | 
			
		||||
        raise_application_error(-20669, 'Manager salary must be between 1800-2000');
 | 
			
		||||
    END IF;
 | 
			
		||||
END;
 | 
			
		||||
/
 | 
			
		||||
 | 
			
		||||
UPDATE EMP_COPIA SET SAL=5 WHERE EMPNO=7788;
 | 
			
		||||
		Reference in New Issue
	
	Block a user