geofox

Clase III - Modulo 2

Mar 4th, 2012
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 3.36 KB | None | 0 0
  1. CONECTARSE A NORHWIND
  2. /* CREAR UNA SECUENCIA SQ_REGION */
  3. CREATE SEQUENCE SQ_REGION START WITH 5 INCREMENT BY 1;
  4.  
  5.  
  6. /* CREAR UN TRIGGER QUE UTILICE LA SECUENCIA E INCREMENTE EL CODIGO DE LA REGION */
  7.  
  8. CREATE TRIGGER REGION_SEQUENCIAS BEFORE INSERT ON REGION
  9. FOR EACH ROW
  10. BEGIN
  11.       :NEW.REGIONID:=SQ_REGION.NEXTVAL;
  12.  
  13. END;
  14. /
  15.  
  16.  
  17. /* CREAR UN PROCEDIMIENTO ALMACENADO QUE INSERTE UNA REGION EN LA TABLA REGION Y
  18. RECIBA COMO PARAMETROS SOLO NOMBREREGION (DEBE DE IR VALIDADO EN NO REPETIR REGIONES) */
  19.  
  20. CREATE OR REPLACE PROCEDURE INSERT_R(REGION VARCHAR2)
  21. IS
  22. EXISTE NUMBER;
  23. BEGIN
  24.     SELECT COUNT(*) INTO EXISTE  FROM REGION WHERE REGIONDESCRIPTION=(UPPER(REGION));
  25.    
  26.     IF EXISTE=1 THEN
  27.         DBMS_OUTPUT.PUT_LINE(' REGION : ' || REGION || ' EXISTENTE ');
  28.  
  29.    
  30.      ELSE
  31.         INSERT INTO REGION(REGIONDESCRIPTION)VALUES(REGION);
  32.     END IF;
  33.  
  34. END;
  35. /
  36. SELECT COUNT(*) AS EXISTE  FROM REGION WHERE REGIONDESCRIPTION='Centro America';
  37.  
  38.  
  39. CREAR UN PROCEDIMIENTO ALMACENADO PARA ACTUALIZAR LOS DATOS DE UNA REGION
  40.                    */
  41. CREATE OR REPLACE PROCEDURE UPDATE_R(IDREG NUMBER, REGION VARCHAR2)
  42. IS
  43. BEGIN
  44.     UPDATE REGION SET REGIONDESCRIPTION=REGION WHERE REGIONID=IDREG;   
  45. END;
  46. /
  47.  
  48.  
  49. /* CREAR UN PROCEDIMIENTO ALMACENADO PARA ELIMINAR UNA REGION  */
  50. CREATE OR REPLACE PROCEDURE  ELIMINAR_R(IDREG NUMBER)
  51. IS
  52. BEGIN
  53.     DELETE FROM REGION WHERE REGIONID=IDREG;
  54.  
  55. END;
  56. /
  57.  
  58.  
  59.  
  60. /* CREAR UN PROCEDIMIENTO ALMACENADO PARA MOSTRAR LAS ORDENES EMITIDAS POR REGION */
  61. POR REGION */
  62.  
  63.  
  64. SELECT a.orderid FROM orders a inner join
  65. territories b ON a.territoryid=b.territoryid
  66. inner join region c ON b.regionid=a.territoryid
  67. inner join employees  s ON s.employeeid=a.employeeid;
  68.  
  69.  
  70.  
  71. CREATE OR REPLACE FUNCTION Extraer(Cadena VARCHAR2)
  72. RETURN VARCHAR2 IS
  73. resp VARCHAR2(100);
  74. BEGIN
  75.     resp:=SUBSTR(Cadena, -1,INSTR(Cadena,';'));
  76.     RETURN resp;
  77.  
  78. END;
  79. /
  80.  
  81. CREATE OR REPLACE FUNCTION  Actualizar(Cadena VARCHAR2) RETURN
  82. VARCHAR2 IS
  83. resp VARCHAR2(100);
  84. BEGIN
  85.     resp:=SUBSTR(Cadena, INSTR(Cadena, ';') + 1,
  86.     LENGTH(Cadena));
  87.     RETURN resp;
  88.  
  89. END;
  90. /
  91.  
  92.  
  93.  
  94. SELECT extraer('34;6.46;100.65;') FROM dual;
  95.  
  96. /*  crear un sp que inserte utilizando las funciones extraer y actualizar    */
  97.  
  98. CREATE OR REPLACE PROCEDURE add_detalle(Productos VARCHAR2, Precios VARCHAR2,
  99. Cantidades VARCHAR2)   
  100. IS
  101. Producto NUMBER;
  102. Cantidad NUMBER;
  103. Precio   NUMBER(8,2);
  104. BEGIN
  105.         FOR i IN 1..LENGTH(Productos) LOOP
  106.        
  107.                 Producto:=TO_NUMBER(Extraer(Productos));
  108.             Producto:=Actualizar(Productos);
  109.            
  110.             Cantidad:=TO_NUMBER(Extraer(Cantidades));
  111.             Cantidad:=Actualizar(Cantidades);
  112.  
  113.             Precio:=TO_NUMBER(Extraer(Precios));
  114.             Precio:=Actualizar(Precios);
  115.        
  116.             INSERT INTO Detalle(CodProducto,Cant,Prec)VALUES
  117.             (Producto,Cantidad,Precio);
  118.  
  119.         END LOOP;
  120. END;
  121. /
  122.  
  123.  
  124. call add_detalle(8;7;8,7;6;7,10;5.70;100);
  125.  
  126.  
  127. CREATE OR REPLACE PACKAGE Utilitarios AS
  128.     PROCEDURE INSERT_R(nombre VARCHAR2);
  129.     PROCEDURE UPDATE_R(id NUMBER, nombre VARCHAR2);
  130.     FUNCTION Extraer(cadena VARCHAR2) RETURN VARCHAR2;
  131.     FUNCTION Actualizar(cadena VARCHAR2) RETURN VARCHAR2;
  132.  
  133.  
  134. END Utilitarios;
  135. /
  136.  
  137. CREATE OR REPLACE PACKAGE BODY Utilitarios
  138. AS
  139.     PROCEDURE INSERT_R(nombre VARCHAR2) IS
  140.     PROCEDURE UPDATE_R(id NUMBER, nombre VARCHAR2);
  141.     FUNCTION Extraer(cadena VARCHAR2);
  142.     FUNCTION Actualizar(cadena VARCHAR2);
  143.  
  144.  
  145. END Utilitarios;
  146. /
  147.  
  148.  
  149. invocar con paquetes
  150.  
  151. SELECT Utilitarios.extraer('15.2;63.2) from duaL;
Advertisement
Add Comment
Please, Sign In to add comment