SoloCodigo

Bases de Datos => Oracle => Mensaje iniciado por: luiquroj en Jueves 28 de Abril de 2005, 16:21

Título: Ayuda
Publicado por: luiquroj en Jueves 28 de Abril de 2005, 16:21
Queria saber si me podian ayudar a resolver un proceso ya que no me sale

Basicamente es que inserte en la tabla histo_ordenes_x_cliente usando 2 cursores, aqui dejo las tablas relacionadas a dicho proceso y el proceso a como lo tengo por si alguien me puede ayudar

CREATE TABLE CLIENTES(
   ID_CLIENTE   VARCHAR2(3)   NOT NULL
   DESC_CLIENTE   VARCHAR2(30)   NOT NULL
   TELEFONO   VARCHAR2(15)   NOT NULL
   DIRECCION   VARCHAR2(30)   NOT NULL
   ID_SEGMENTO   VARCHAR2(10)   NOT NULL
   CREDITO      VARCHAR2(30)   NOT NULL
   ESTADO      VARCHAR2(1)   NOT NULL);

CREATE TABLE SEGMENTO(
   ID_SEGMENTO   VARCHAR2(10)   NOT NULL
   DESC_SEGMENTO   VARCHAR2(20)   NOT NULL);

CREATE TABLLE ORDEN_MAESTRO(
    ID_ORDEN      VARCHAR2(5)   NOT NULL
    ID_CLIENTE      VARCHAR2(3)   NOT NULL
    ID_SUCURSAL      VARCHAR2(6)   NOT NULL
    FEC_ORDEN      DATE      NOT NULL
    FEC_ENVIO      DATE      NOT NULL
    EMPLEADO_REGISTRO   VARCHAR2(10)   NOT NULL
    TOTAL      NUMBER(15)   NOT NULL
    ORDEN_COMPLETA   VARCHAR2(1)   NOT NULL
    FORMA_PAGO      VARCHAR2(1)   NOT NULL);

CREATE TABLE SUCURSAL(
   ID_SUCURSAL   VARCHAR2(6)   NOT NULL
   DESC_SUCURSAL   VARCHAR2(30)   NOT NULL
   DIRECCION   VARCHAR2(30)   NOT NULL);

CREATE TABLLE ORDEN_MAESTRO(
    ID_ORDEN      VARCHAR2(5)   NOT NULL
    ID_CLIENTE      VARCHAR2(3)   NOT NULL
    ID_SUCURSAL      VARCHAR2(6)   NOT NULL
    FEC_ORDEN      DATE      NOT NULL
    FEC_ENVIO      DATE      NOT NULL
    EMPLEADO_REGISTRO   VARCHAR2(10)   NOT NULL
    TOTAL      NUMBER(15)   NOT NULL
    ORDEN_COMPLETA   VARCHAR2(1)   NOT NULL
    FORMA_PAGO      VARCHAR2(1)   NOT NULL);

HISTO_ORDENES_X_CLIENTE(
       AÑO       DATE      NOT NULL
       MES       DATE      NOT NULL
       ID_CLIENTE    VARCHAR2(10)   NOT NULL
       TOTAL_ORDEN    NUMBER(20)   NOT NULL
       NUMERO_DE_ORDENES NUMBER(15)   NOT NULL);

CREATE OR REPLACE PROCEDURE HISTO
   BEGIN
   DECLARE
      CURSOR C_CLIENTECREDITO IS
      SELECT * FROM CLIENTES
      WHERE CLIENTES.CREDITO != '1' AND
      CLIENTES.ESTADO = 'A' AND
      CLIENTES.ID_SEGMENTO=SEGMENTO.ID_SEGMENTO AND
      SEGMENTO.DESC_SEGMENTO != 'EDUCACION';
      
      CURSOR MAESTROCLIENTE IS
      SELECT * FROM ORDEN_MAESTRO
      WHERE  ORDEN_MAESTRO.ORDEN_COMPLETA='S' AND
      ORDEN_MAESTRO.ID_SUCURSAL=SUCURSAL.ID_SUCURSAL AND
      SUCURSAL.DESC_SUCURSAL='SAN JOSE' AND
      (BETWEEN TO_DATE('DD-MM-YY','01-01-05)AND TO_DATE('DD-MM-YY','31-12-05')) AND
      C_CLIENTECREDITO.ID_CLIENTE=clientes.ID_CLIENTE;               REVISAR

      V_TOT_ORDENES   ORDEN_MAESTRO.TOTAL%TYPE;
      V_NUM_ORDENES   NUMBER(30):=0;
      CONTADOR   NUMBER(30):=0;
   BEGIN
      OPEN C_CLIENTECREDITO;
      OPEN MAESTROCLIENTE;
         SELECT COUNT(ID_CLIENTE) INTO CONTADOR;
         FOR I IN I.CONTADOR                         REVISAR
            FETCH C_CLIENTECREDITO IN ID_EMPLEADO;
            IF C_CLIENTECREDITO.ID_EMPLEADO = NULL THEN
               MESSAGE('EL REGISTRO ES NULO');
            END IF;
            SELECT COUNT(MAESTROCLIENTE.ID_ORDEN) INTO V_NUM_ORDENES;
            SELECT SUM(MAESTROCLIENTE.TOTAL) INTO V_TOT_ORDENES;
            INSERT INTO HISTO_ORDENES_X_CLIENTE VALUES (TO_DATE('YYYY','2005'),TO_DATE('MM','04'),
            C_CLIENTECREDITO.ID_CLIENTE, V_TOT_ORDENES,V__NUM_ORDENES);
            COMMIT;
         END LOOP;
      CLOSE C_CLIENTECREDITO;
      CLOSE MAESTROCLIENTE;
   
EXCEPTION
   WHEN NO_DATA_FOUND THEN
   RAISE_APPLICATION_ERROR(-20000,'Error, no hay registros según seleccion');
   PAUSE;

   WHEN TOO_MANY_ROWS THEN
   RAISE_APPLICATION_ERROR(-20000,'Error, MUCHOS DATOS CON LA MISMA CONDICIÓN');
   PAUSE;

   WHEN others THEN
   RAISE_APPLICATION_ERROR(-20000,'Error indefinido');
   PAUSE;

END;
END;
/
Título: Re: Ayuda
Publicado por: JuanK en Jueves 9 de Junio de 2005, 14:43
si fueras mas preciso con tus preguntas tendrias algunas o mejores respuestas.
http://foros.solocodigo.com/index.php?showtopic=5710 (http://foros.solocodigo.com/index.php?showtopic=5710)