ASGBD: add SQL samples
Signed-off-by: Nicolás A. Ortega Froysa <nicolas@ortegas.org>
This commit is contained in:
parent
5da929c96b
commit
78442e5fc1
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á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;
|
Loading…
Reference in New Issue
Block a user