geofox

Paquete Detalle Factura

Mar 17th, 2012
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 1.97 KB | None | 0 0
  1. CREATE TABLE ENCABEZADO(
  2. F NUMBER CONSTRAINT PK_NUM_FACTURA PRIMARY KEY,
  3. CL NUMBER,
  4. FECHA DATE DEFAULT(SYSDATE));
  5.  
  6. CREATE TABLE DETALLE(
  7. F NUMBER,
  8. P NUMBER,
  9. C NUMBER,
  10. PR NUMBER(8,2));
  11.  
  12.  
  13. CREATE SEQUENCE SQ_FACTURA START WITH 1 INCREMENT BY 1;
  14.  
  15. CREATE TRIGGER F_SECUENCIA BEFORE INSERT ON ENCABEZADO
  16. FOR EACH ROW
  17. BEGIN
  18.       :NEW.F:=SQ_FACTURA.NEXTVAL;
  19.  
  20. END;
  21.  
  22. /* CL = CLIENTE */
  23.  
  24. INSERT INTO ENCABEZADO(CL)VALUES(1);
  25.  
  26.  
  27. CREATE OR REPLACE PACKAGE UTILITARIOS IS
  28.  
  29. FUNCTION EXTRAER(pCADENA VARCHAR2) RETURN VARCHAR2;
  30. FUNCTION ACTUALIZAR(pCADENA VARCHAR2) RETURN VARCHAR2;
  31. PROCEDURE ADD_FACTURA(pPRODUCTOS VARCHAR2,
  32. pCANTIDADES VARCHAR2,pPRECIOS VARCHAR2);
  33.  
  34. END UTILITARIOS;
  35. /
  36.  
  37. CREATE OR REPLACE PACKAGE BODY UTILITARIOS IS
  38.  
  39. FUNCTION EXTRAER(pCADENA VARCHAR2) RETURN VARCHAR2 IS
  40. BEGIN
  41.         RETURN (SUBSTR(pCADENA,1,INSTR(pcadena,';')-1));
  42.  
  43. END EXTRAER;
  44.  
  45.  FUNCTION  ACTUALIZAR(pCADENA VARCHAR2) RETURN VARCHAR2 IS
  46. BEGIN
  47.         RETURN SUBSTR(pCADENA,INSTR(pcadena,';')+1,LENGTH(pcadena));
  48.  
  49.  
  50.  
  51. END ACTUALIZAR;
  52.  
  53. PROCEDURE ADD_FACTURA(pPRODUCTOS VARCHAR2
  54. ,pCANTIDADES VARCHAR2,pPRECIOS VARCHAR2)
  55. IS
  56. vPROD VARCHAR2(100):=pPRODUCTOS;
  57. vCANT VARCHAR2(100):=pCANTIDADES;
  58. vPREC VARCHAR2(100):=pPRECIOS;
  59. vf NUMBER; vp NUMBER; vC NUMBER; vPr NUMBER(8,2);
  60.  
  61.  
  62. BEGIN
  63.        
  64.            
  65.         SELECT SQ_FACTURA.CURRVAL INTO vf FROM DUAL;
  66.  
  67.  
  68.  
  69.         FOR i IN 1..LENGTH(vprod) LOOP
  70.        
  71.         vp:=TO_NUMBER(extraer(vprod));
  72.         vprod:=actualizar(vprod);
  73.  
  74.         vc:=TO_NUMBER(extraer(vcant));
  75.         vcant:=actualizar(vcant);
  76.  
  77.         vpr:=TO_NUMBER(extraer(vprec));
  78.         vprec:=actualizar(vprec);
  79.        
  80.        
  81.    
  82.         INSERT INTO DETALLE(f,p,c,pr)VALUES(vf,vp,vc,
  83.         vpr);
  84.        
  85.  
  86.  
  87.        
  88.         END LOOP;      
  89.  
  90.    DELETE FROM DETALLE WHERE P IS NULL AND C IS NULL AND PR IS NULL;
  91.  
  92. END ADD_FACTURA;
  93.  
  94. END UTILITARIOS;
  95. /
  96.  
  97.  
  98. CALL UTILITARIOS.ADD_FACTURA('15;8;3;','5;125;4;','1.25;80;125;');
Advertisement
Add Comment
Please, Sign In to add comment