Advertisement
Guest User

Untitled

a guest
Nov 27th, 2014
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.73 KB | None | 0 0
  1. SET SERVEROUTPUT ON;
  2.  
  3. ---------------
  4. --CREATE USER--
  5. ---------------
  6.  
  7. CREATE USER admin
  8. IDENTIFIED BY admin
  9. QUOTA 5000k ON users
  10. DEFAULT TABLESPACE users
  11. TEMPORARY TABLESPACE temp
  12. ACCOUNT UNLOCK;
  13.  
  14. CREATE ROLE role_admin;
  15. GRANT CREATE SESSION, CREATE TABLE, CREATE TRIGGER, CREATE SEQUENCE, CREATE PROCEDURE TO role_admin;
  16. GRANT role_admin TO admin;
  17.  
  18.  
  19. ----------------
  20. --CREATE TABLE--
  21. ----------------
  22.  
  23. CREATE TABLE producto(
  24. id CHAR(4),
  25. nombre VARCHAR(20),
  26. precio NUMBER(6),
  27. CONSTRAINT producto_pk PRIMARY KEY(id)
  28. );
  29.  
  30. CREATE TABLE boleta(
  31. codigo NUMBER,
  32. fecha DATE,
  33. producto_id CHAR(4),
  34. cantidad NUMBER(3),
  35. total NUMBER,
  36. CONSTRAINT boleta_pk PRIMARY KEY (codigo),
  37. CONSTRAINT boleta_producto_fk FOREIGN KEY (producto_id) REFERENCES producto(id)
  38. );
  39.  
  40. ------------------
  41. --CREAR SEQUENCE--
  42. ------------------
  43.  
  44. CREATE SEQUENCE seq_boleta
  45. START WITH 50
  46. INCREMENT BY -50
  47. MAXVALUE 50
  48. NOMINVALUE
  49. NOCYCLE
  50. NOCACHE;
  51.  
  52. -----------------------------------------
  53. --CREAR PROCEDURE PARA INGRESA PRODUCTO--
  54. -----------------------------------------
  55.  
  56. CREATE OR REPLACE PROCEDURE sp_ingresa_producto
  57. (nId IN CHAR, nNombre IN VARCHAR, nPrecio IN NUMBER)
  58. IS
  59. BEGIN
  60. INSERT INTO producto VALUES (nId, nNombre, nPrecio);
  61. END;
  62. /
  63.  
  64. EXECUTE sp_ingresa_producto('000', 'Lapiz Bic', 250);
  65. EXECUTE sp_ingresa_producto(&Id, &Nombre, &Precio);
  66.  
  67. SELECT * from producto;
  68.  
  69. ----------------------------------------
  70. --CREATE PROCEDURE PARA INGRESA BOLETA--
  71. ----------------------------------------
  72.  
  73. CREATE OR REPLACE PROCEDURE sp_ingresa_boleta
  74. (nCantidad IN NUMBER, nProducto IN CHAR)
  75. IS
  76. bol_codigo NUMBER;
  77. bol_fechita DATE;
  78. bol_precio NUMBER;
  79. bol_total NUMBER;
  80. BEGIN
  81. SELECT seq_boleta.nextval INTO bol_codigo FROM DUAL;
  82. SELECT SYSDATE INTO bol_fechita FROM dual;
  83. SELECT precio INTO bol_precio FROM producto WHERE id = nProducto;
  84. bol_total := bol_precio * nCantidad;
  85.  
  86. INSERT INTO boleta VALUES (bol_codigo, bol_fechita, nProducto, nCantidad, bol_total);
  87. END;
  88. /
  89.  
  90. EXECUTE sp_ingresa_boleta (10, '001');
  91.  
  92. SELECT * FROM boleta;
  93.  
  94. ----------------------------------------------------------------
  95. --CREATE PROCEDURE PARA INGRESA BOLETA CON VALIDACION CONTADOR--
  96. ----------------------------------------------------------------
  97.  
  98. CREATE OR REPLACE PROCEDURE sp_ingresa_boleta_validacion
  99. (nCantidad IN NUMBER, nProducto IN CHAR)
  100. IS
  101. contador NUMBER;
  102. bol_codigo NUMBER;
  103. bol_fechita DATE;
  104. bol_precio NUMBER;
  105. bol_total NUMBER;
  106. BEGIN
  107. SELECT COUNT(*) INTO contador FROM producto WHERE id = nProducto;
  108.  
  109. IF (contador = 0) THEN
  110. dbms_output.put_line('El producto '|| nProducto || ' no existe.');
  111.  
  112. ELSE
  113. SELECT seq_boleta.nextval INTO bol_codigo FROM DUAL;
  114. SELECT SYSDATE INTO bol_fechita FROM dual;
  115. SELECT precio INTO bol_precio FROM producto WHERE id = nProducto;
  116. bol_total := bol_precio * nCantidad;
  117. INSERT INTO boleta VALUES (bol_codigo, bol_fechita, nProducto, nCantidad, bol_total);
  118. END IF;
  119.  
  120. END;
  121. /
  122.  
  123. EXECUTE sp_ingresa_boleta_validacion (10,'005');
  124.  
  125. ----------------------------------------------------------------------------
  126. --CREATE PROCEDURE PARA INGRESA BOLETA CON VALIDACION EXCEPCIONES Y CURSOR--
  127. ---------------------------------------------------------------------------
  128.  
  129. CREATE OR REPLACE PROCEDURE sp_ingresa_boleta_excepcion
  130. (nCantidad IN NUMBER, nProducto IN CHAR)
  131. IS
  132. bol_codigo NUMBER;
  133. bol_fechita DATE;
  134. bol_precio NUMBER;
  135. bol_total NUMBER;
  136. CURSOR lista_boleta IS SELECT * FROM boleta;
  137. fila_boleta boleta%ROWTYPE;
  138. BEGIN
  139. SELECT seq_boleta.nextval INTO bol_codigo FROM DUAL;
  140. SELECT SYSDATE INTO bol_fechita FROM dual;
  141. SELECT precio INTO bol_precio FROM producto WHERE id = nProducto;
  142. bol_total := bol_precio * nCantidad;
  143.  
  144. INSERT INTO boleta VALUES (bol_codigo, bol_fechita, nProducto, nCantidad, bol_total);
  145.  
  146. OPEN lista_boleta;
  147. dbms_output.put_line(RPAD('CODIGO',10,' ') ||' '|| RPAD('FECHA',10, ' ')||' '|| RPAD('ID DE PRODUCTO', 10, ' ') ||' '|| RPAD('CANTIDAD', 10, ' ') ||' '|| RPAD('TOTAL', 10, ' '));
  148. dbms_output.put_line(RPAD('=',10, '=') ||' '|| RPAD('=',10, '=') ||' '|| RPAD('=',10, '=') ||' '|| RPAD('=',10, '=') ||' '|| RPAD('=',10, '='));
  149.  
  150. LOOP
  151. FETCH lista_boleta INTO fila_boleta;
  152. EXIT WHEN lista_boleta%notfound;
  153. dbms_output.put_line (RPAD(fila_boleta.codigo, 10, ' ') ||' '|| RPAD(fila_boleta.fecha,10, ' ') ||' '|| RPAD(fila_boleta.producto_id, 10, ' ') ||' '|| RPAD(fila_boleta.cantidad, 10, ' ') ||' '|| RPAD(TO_CHAR(fila_boleta.total,10, ' '), '$99g999d'));
  154. END LOOP;
  155.  
  156. EXCEPTION
  157. WHEN no_data_found THEN
  158. dbms_output.put_line('El producto '|| nProducto || ' no existe.');
  159. END;
  160. /
  161.  
  162. EXECUTE sp_ingresa_boleta_excepcion (10, '001');
  163. desc boleta;
  164. SELECT * FROM boleta;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement