geofox

Facturas para lllevar

Mar 16th, 2012
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 3.69 KB | None | 0 0
  1. CREATE OR REPLACE PACKAGE UTILITARIOS IS
  2.  
  3. FUNCTION EXTRAER(pCADENA VARCHAR2) RETURN VARCHAR2;
  4. FUNCTION ACTUALIZAR(pCADENA VARCHAR2) RETURN VARCHAR2;
  5. PROCEDURE ADD_FACTURA(pCLIENTE NUMBER,pPRODUCTOS VARCHAR2,
  6. pCANTIDADES VARCHAR2,pPRECIOS VARCHAR2);
  7.  
  8. END UTILITARIOS;
  9.  
  10.  
  11.  
  12. CREATE OR REPLACE PACKAGE BODY UTILITARIOS IS
  13.  
  14. FUNCTION EXTRAER(pCADENA VARCHAR2) RETURN VARCHAR2 IS
  15. BEGIN
  16.     RETURN (SUBSTR(pCADENA,1,INSTR(pcadena,';')-1));
  17.  
  18.  
  19. END EXTRAER;
  20.  
  21. FUNCTION  ACTUALIZAR(pCADENA VARCHAR2) RETURN VARCHAR2 IS
  22. BEGIN
  23.     RETURN SUBSTR(pCADENA,INSTR(pcadena,';')+1,LENGTH(pcadena));
  24.  
  25.  
  26.  
  27. END ACTUALIZAR;
  28.  
  29.  
  30.  
  31.  
  32. END UTILITARIOS;
  33.  
  34.  
  35.  
  36. CREATE OR REPLACE PROCEDURE ADD_FACTURA(pPRODUCTOS VARCHAR2
  37. ,pCANTIDADES VARCHAR2,pPRECIOS VARCHAR2)
  38. IS
  39. vPROD VARCHAR2(100):=pPRODUCTOS;
  40. vCANT VARCHAR2(100):=pCANTIDADES;
  41. vPREC VARCHAR2(100):=pPRECIOS;
  42. BANDERA BOOLEAN:=TRUE;
  43. vf NUMBER; vp NUMBER; vC NUMBER; vPr NUMBER(8,2);
  44.  
  45.  
  46.  
  47. BEGIN
  48.    
  49.         SELECT SQ_FACTURA.CURRVAL INTO vf FROM DUAL;
  50.  
  51.  
  52.  
  53.     WHILE(BANDERA=TRUE) LOOP
  54.    
  55.     vp:=TO_NUMBER(extraer(vprod));
  56.     vprod:=actualizar(vprod);
  57.  
  58.     vc:=TO_NUMBER(extraer(vcant));
  59.     vcant:=actualizar(vcant);
  60.  
  61.     vpr:=TO_NUMBER(extraer(vprec));
  62.     vprec:=actualizar(vprec);
  63.    
  64.     INSERT INTO DETALLE(f,p,c,pr)VALUES(vf,vp,vc,
  65.     vpr);
  66.                
  67.    
  68.         IF LENGTH(vprod)=0 THEN
  69.        bandera:=FALSE;
  70.    
  71.     END IF;        
  72.  
  73.        
  74.    
  75.     END LOOP;  
  76.  
  77. END ADD_FACTURA;
  78.  
  79.  
  80.  
  81.  
  82. CREATE SEQUENCE SQ_FACTURA START WITH 1 INCREMENT BY 1;
  83.  
  84. CREATE TRIGGER F_SECUENCIA BEFORE INSERT ON ENCABEZADO
  85. FOR EACH ROW
  86. BEGIN
  87.       :NEW.F:=SQ_FACTURA.NEXTVAL;
  88.  
  89. END;
  90.  
  91. CREATE sequence autor_id increment BY 1  START WITH 1;
  92. CURRVAL
  93.  
  94.  
  95.  
  96. CREATE OR REPLACE FUNCTION EXTRAER(pCADENA VARCHAR2) RETURN VARCHAR2 IS
  97. BEGIN
  98.     RETURN (SUBSTR(pCADENA,1,INSTR(pcadena,';')-1));
  99.  
  100. END;
  101. /
  102.  
  103.  
  104. PRODUCTOS = '15;8;3';
  105. cantidades = '5;125;4';
  106. Precios = '1.25;80;125';
  107.  
  108. CALL ADD_FACTURA('15;8;3','5;125;4','1.25;80;125');
  109.  
  110.  
  111. CREATE OR REPLACE FUNCTION ACTUALIZAR(pCADENA VARCHAR2) RETURN VARCHAR2 IS
  112. BEGIN
  113.     RETURN SUBSTR(pCADENA,INSTR(pcadena,';')+1,LENGTH(pcadena));
  114.  
  115. END;
  116.  
  117.  
  118. VARIABLE ENTRADA : SOLO LECTURA
  119. VARIABLE SALIDA : VARIABLEL CON RETORNO, DE REFERENCIA
  120.  
  121.  
  122. encabezado
  123.  
  124. f    cl     fecha
  125. 3    1      16/03/12
  126.  
  127.  
  128. detalle
  129.  
  130. F     P    C    Pr
  131.  
  132.  
  133. CREATE OR REPLACE TRIGGER ADD_BL_CATEGORIES ON BT_CATEGORIES
  134. AFTER INSERT OR UPDATE OR DELETE FOR EACH ROW
  135. (WHEN SYSDATE > '15/12/2011';
  136. BEGIN
  137.  
  138.  INSERT INTO BT_CATEGORIES(CATEGORYID,CATEGORYNAME,DESCRIPTION,
  139. USUARIO,FECHA,ACCION)VALUES(:OLD.CATEGORYID,:OLD.CATEGORYNAME,
  140. :OLD.DESCRIPTION, USER USERNAME, SYSDATE,'HISTORICO');
  141.  
  142.  
  143. END;
  144. /
  145.  
  146. CREATE TABLE ENCABEZADO(
  147. F NUMBER CONSTRAINT PK_NUM_FACTURA PRIMARY KEY,
  148. CL NUMBER,
  149. FECHA DATE DEFAULT(SYSDATE));
  150.  
  151. CREATE TABLE DETALLE(
  152. F NUMBER,
  153. P NUMBER,
  154. C NUMBER,
  155. PR NUMBER(8,2));
  156.  
  157. /* Factura 1 insert masivo  */
  158.  
  159. CREATE OR REPLACE PROCEDURE ADD_FACTURA(pPRODUCTOS VARCHAR2
  160. ,pCANTIDADES VARCHAR2,pPRECIOS VARCHAR2)
  161. IS
  162. vPROD VARCHAR2(100):=pPRODUCTOS;
  163. vCANT VARCHAR2(100):=pCANTIDADES;
  164. vPREC VARCHAR2(100):=pPRECIOS;
  165. BANDERA BOOLEAN:=TRUE;
  166. vf NUMBER; vp NUMBER; vC NUMBER; vPr NUMBER(8,2);
  167.  
  168.  
  169. BEGIN
  170.        
  171.            
  172.         SELECT SQ_FACTURA.CURRVAL INTO vf FROM DUAL;
  173.  
  174.  
  175.  
  176.         FOR i IN 1..LENGTH(vprod) LOOP
  177.        
  178.         vp:=TO_NUMBER(extraer(vprod));
  179.         vprod:=actualizar(vprod);
  180.  
  181.         vc:=TO_NUMBER(extraer(vcant));
  182.         vcant:=actualizar(vcant);
  183.  
  184.         vpr:=TO_NUMBER(extraer(vprec));
  185.         vprec:=actualizar(vprec);
  186.        
  187.        
  188.        
  189.        
  190.    
  191.         INSERT INTO DETALLE(f,p,c,pr)VALUES(vf,vp,vc,
  192.         vpr);
  193.        
  194.  
  195.  
  196.        
  197.         END LOOP;      
  198.  
  199. END;
  200. /
  201.  
  202.  
  203. CALL ADD_FACTURA('15;8;3;','5;125;4;','1.25;80;125;');
Advertisement
Add Comment
Please, Sign In to add comment