geofox

Procedimientos

Mar 18th, 2012
243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 3.45 KB | None | 0 0
  1. 1. conectarse con el usuario northwind
  2. sqlplus own_northwind/oracle
  3.  
  4. 2. crear un procedimiento almacenado que muestre en pantalla
  5. los nombres de los clientes y ordenes realizadas en un periodo
  6. de tiempo
  7.  
  8.  
  9.  
  10. /* CON FECHA */
  11.  
  12. CREATE OR REPLACE PROCEDURE ListadoClientes(PERIODO DATE)
  13. IS
  14. BEGIN
  15.  
  16.  FOR I IN (SELECT C.CompanyName,O.OrderID FROM Customers C
  17. INNER JOIN Orders O ON C.CustomerID=O.CUstomerID
  18. WHERE O.OrderDate=PERIODO) LOOP
  19.  
  20.   DBMS_OUTPUT.PUT_LINE(' CLIENTE :' || TO_CHAR(I.COMPANYNAME)
  21.   || ' ORDEN : ' || TO_CHAR(I.ORDERID));
  22.  
  23. END LOOP;
  24. END;
  25. /
  26.  
  27.  
  28. /* DESDE - HASTA (DIAS) */
  29.  
  30. CREATE OR REPLACE PROCEDURE ListadoClientes(DESDE NUMBER, HASTA NUMBER)
  31. IS
  32. BEGIN
  33.  
  34.  FOR I IN (SELECT C.CompanyName,O.OrderID,O.OrderDate FROM Customers C
  35. INNER JOIN Orders O ON C.CustomerID=O.CUstomerID
  36. WHERE EXTRACT(DAY FROM O.OrderDate) BETWEEN DESDE AND HASTA) LOOP
  37.  
  38.   DBMS_OUTPUT.PUT_LINE(' CLIENTE :' || TO_CHAR(I.COMPANYNAME)
  39.   || ' ORDEN : ' || TO_CHAR(I.ORDERID));
  40.  
  41. END LOOP;
  42. END;
  43. /
  44.  
  45.  
  46.  
  47. tablas involucradas(customer y orders)
  48.  
  49.  
  50. 3. ingresar como usuario scott y crear una tabla llamada
  51. emp_log(emp_id,date_log,sal,action)
  52.  
  53. SQLPLUS SCOTT/SCOTT
  54.  
  55. CREATE TABLE EMP_LOG(
  56. EMP_ID NUMBER,
  57. date_log DATE DEFAULT(SYSDATE),
  58. SAL NUMBER(7,2),
  59. ACTION VARCHAR2(100));
  60.  
  61.  
  62.  
  63.  
  64.  
  65. 4. crear un TRIGGER llamado emp_log que se dispare cuando
  66. se quiera actualizar el valor de sal de la tabla emp en valores
  67. mayores a 1000 e INSERT en la tabla emp_log los valores que se han actualizado
  68.  
  69.  
  70.  
  71. CREATE OR REPLACE TRIGGER emp_log BEFORE  UPDATE  ON EMP
  72. FOR EACH ROW
  73. WHEN (NEW.SAL > 1000)
  74. BEGIN    
  75.         INSERT INTO EMP_LOG(EMP_ID,SAL,ACTION)VALUES(:OLD.EMPNO,:NEW.SAL,'ACTUALIZAR');          
  76. END;
  77.  
  78.  
  79.  
  80.  
  81.  
  82. probarlo com    UPDATE emp SET sal=sal + 1250 WHERE deptno=20;
  83.  
  84.  
  85. /* EN LOS 3 EVENTOS */
  86.  
  87. CREATE OR REPLACE TRIGGER emp_log AFTER  INSERT OR UPDATE OR DELETE  ON EMP
  88. FOR EACH ROW
  89. BEGIN    
  90.        
  91.     IF INSERTING THEN
  92.  
  93.        INSERT INTO EMP_LOG(EMP_ID,SAL,ACTION)VALUES(:NEW.EMPNO,:NEW.SAL,'INSERCION');
  94.  
  95.         ELSIF UPDATING THEN
  96.               IF (:NEW.SAL > 1000) THEN
  97.  
  98.  
  99.                  INSERT INTO EMP_LOG(EMP_ID,SAL,ACTION)VALUES(:OLD.EMPNO,:NEW.SAL,'ACTUALIZACION');
  100.  
  101.                 END IF;
  102.        
  103.         ELSIF DELETING THEN
  104.  
  105.  
  106.         INSERT INTO EMP_LOG(EMP_ID,SAL,ACTION)VALUES(:OLD.EMPNO,:OLD.SAL,'ELIMINACION');
  107.  
  108.         END IF;
  109.          
  110. END;
  111. /
  112.  
  113.  
  114.  
  115. 5. CREAR UN PAQUETE Y ASIGNARLE PERMISOS DE EJECUCION DESDE OTRO USUARIO
  116.  
  117.  
  118.  
  119. CREATE OR REPLACE PACKAGE CONSULTAS IS
  120.  
  121.  
  122. PROCEDURE ListadoClientes(DESDE NUMBER, HASTA NUMBER);
  123.  
  124.  
  125. END CONSULTAS;
  126.  
  127.  
  128. CREATE OR REPLACE  PACKAGE BODY CONSULTAS IS
  129.  
  130. PROCEDURE ListadoClientes(DESDE NUMBER, HASTA NUMBER)
  131. IS
  132. BEGIN
  133.  
  134.  FOR I IN (SELECT C.CompanyName,O.OrderID,O.OrderDate FROM Customers C
  135. INNER JOIN Orders O ON C.CustomerID=O.CUstomerID
  136. WHERE EXTRACT(DAY FROM O.OrderDate) BETWEEN DESDE AND HASTA) LOOP
  137.  
  138.   DBMS_OUTPUT.PUT_LINE(' CLIENTE :' || TO_CHAR(I.COMPANYNAME)
  139.   || ' ORDEN : ' || TO_CHAR(I.ORDERID));
  140.  
  141. END LOOP;
  142.  
  143. END ListadoClientes;
  144.  
  145.  
  146. END CONSULTAS;
  147.  
  148. /* CREANDO tablespace y usuario */
  149.  
  150. CREATE tablespace tbs_paquete datafile 'c:\app\oracle\oradata\orcl\tbs_paquete.dbf' size
  151. 20m;
  152.  
  153. CREATE USER own_paquete identified BY 123 DEFAULT tablespace tbs_paquete temporary
  154.  tablespace temp;
  155.  
  156. grant CONNECT, resourte TO own_paquete;
  157.  
  158. /* ASIGNANDO PERMISO DE EJECUCION DEL PAQUETE AL USUARIO OWN_PAQUETE */
  159.  
  160. grant EXECUTE ON own_northwind.consultas TO own_paquete;
Advertisement
Add Comment
Please, Sign In to add comment