URGENTE PROBLEMA CURSOR

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
ulisses.vertuan
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qua, 04 Fev 2009 2:19 pm
Localização: bauru - sp

TENHO ESTA PROCEDURE QUE COM O CURSOR C_DIVISAO POSSUINDO AS DIVISOES DO PRODUTO EXEMPLO (1,1,2,2,3,3,4...)

EU QUERO TESTAR DE O ITEM DO CURSOR é IGUAL AO PRIMEIRO DIVISAO (primeira_divisao) mas da o seguinte erro

Error(91,18 ): PLS-00306: numero incorreto de tipos de argumentos na chamada para '='

Error(91,18 ): PLS-00306: numero incorreto de tipos de argumentos na chamada para '<>'

Selecionar tudo

create or replace
PROCEDURE           "PRAZO_DIVISAO" (ORDERID PEDIDO.CDPEDIDO%TYPE,CNPJ PEDIDO.CNPJ%TYPE) IS
BEGIN    
    
    
    
    DECLARE 
    
     CURSOR C_PRODUTO IS SELECT CDPRODUTO FROM PEDIDOITEM WHERE CDPEDIDO=ORDERID ORDER BY CDPRODUTO;
     CURSOR C_DIVISAO IS SELECT CDDIVISAO FROM DIVISAO WHERE CDDIVISAO IN(SELECT CDDIVISAO FROM PRODUTO WHERE CDLABORATORIO= cdlaboratorio AND CDPRODUTO IN(SELECT CDPRODUTO FROM PEDIDOITEM WHERE CDPEDIDO=ORDERID));
      

    
    
    
    prazo_pedido NUMBER:=0;
    atual NUMBER:=0;
    divisao C_DIVISAO%ROWTYPE;
    produto C_PRODUTO%ROWTYPE;
    linha C_DIVISAO%ROWTYPE;
    primeira_divisao PRODUTO%TYPE;
   
    
    
    cnpj_lab PEDIDOLAB.CNPJ%TYPE;           
    cdlaboratorio_lab PEDIDOLAB.CDLABORATORIO%TYPE;
    cdpedidolab_lab PEDIDOLAB.CDPEDIDOLAB%TYPE;
    rentrada_lab PEDIDOLAB.RENTRADA%TYPE;       
    situacao_lab PEDIDOLAB.SITUACAO%TYPE;       
    data_lab PEDIDOLAB.DATA_RETORNO%TYPE;   
    rsaida_lab PEDIDOLAB.RSAIDA%TYPE;         
    datacadastro_lab PEDIDOLAB.DATACADASTRO%TYPE; 
    dataretorno_lab PEDIDOLAB.DATA_RETORNO%TYPE;
      
    cdpedido PEDIDO.CDPEDIDO%TYPE;
    cnpj PEDIDO.CNPJ%TYPE;
    cdlaboratorio PEDIDO.CDLABORATORIO%TYPE;
    cdrepresentante PEDIDO.CDREPRESENTANTE%TYPE;
    uf PEDIDO.UF%TYPE;
		cdol PEDIDO.CDOL%TYPE;
    datacadastro PEDIDO.DATACADASTRO%TYPE;
    cdsituacao PEDIDO.CDSITUACAO%TYPE;
    cdpi PEDIDO.CDPI%TYPE;
    origem PEDIDO.ORIGEM%TYPE;
    obs PEDIDO.OBS%TYPE;
    formapagto PEDIDO.FORMAPAGTO%TYPE;
    
   
     BEGIN    
     SELECT CDPEDIDO,CNPJ,CDLABORATORIO,CDREPRESENTANTE,UF,CDOL,DATACADASTRO,CDSITUACAO,CDPI,ORIGEM,OBS,FORMAPAGTO INTO
            cdpedido,cnpj,cdlaboratorio,cdrepresentante,uf,cdol,datacadastro,cdsituacao,cdpi,origem,obs,formapagto FROM PEDIDO WHERE CDPEDIDO = ORDERID;
     
     SELECT CDPEDIDOLAB,RENTRADA,SITUACAO,DATA_RETORNO,RSAIDA INTO
            cdpedidolab_lab,rentrada_lab,situacao_lab, dataretorno_lab,rsaida_lab FROM PEDIDOLAB WHERE CDPEDIDO = ORDERID;
      
     
     SELECT CDDIVISAO INTO primeira_divisao FROM PRODUTO WHERE CDLABORATORIO=cdlaboratorio 
                   AND CDPRODUTO IN(SELECT CDPRODUTO FROM PEDIDOITEM WHERE CDPEDIDO=ORDERID) 
                   AND ROWNUM=1 ORDER BY CDPRODUTO;
     
    
    
  
    OPEN C_DIVISAO;
    OPEN C_PRODUTO;
    
    
   
    FETCH C_PRODUTO INTO produto;
    FETCH C_DIVISAO INTO divisao;
        IF C_PRODUTO%Rowcount = 0 OR C_DIVISAO%ROWCOUNT = 0 THEN
						RAISE_APPLICATION_ERROR(-20023, 'Sem Produto Cadastrado na PEDIDOITEM.');
        END IF;
 
 
    LOOP
     FETCH C_DIVISAO INTO divisao;
     FETCH C_PRODUTO INTO produto;
    
     
      WHILE divisao = reg LOOP **************//ERRO AQUI 
        atual := divisao;
      END LOOP;
     
      BEGIN
       SELECT PRAZO INTO prazo_pedido FROM DIVISAO WHERE CDLABORATORIO= cdlaboratorio AND CDDIVISAO=atual;
       DELETE FROM PARCELA WHERE CDPEDIDO=ORDERID;
       ADD_PARCEL(ORDERID, cnpj,prazo_pedido);
      END;
      
      IF divisao <> atual *************//ERRO AQUI
       THEN
          SELECT Seq_CDPEDIDO.NEXTVAL AS CODIGO FROM DUAL;
          INSERT INTO PEDIDO SELECT CODIGO,CNPJ,CDLABORATORIO,CDREPRESENTANTE,UF,CDOL,DATACADASTRO,CDSITUACAO,CDPI,ORIGEM,OBS,FORMAPAGTO
                                            FROM PEDIDO WHERE CDPEDIDO=ORDERID;
          INSERT INTO PEDIDOITEM SELECT CODIGO,CNPJ,CDPRODUTO,QTPEDIDA,CDLABORATORIO,DATACADASTRO,DESCONTO 
                                            FROM PEDIDOITEM WHERE CDPEDIDO=ORDERID AND CDPRODUTO = C_PRODUTO;
          INSERT INTO PEDIDOLAB SELECT CODIGO,CDLABORATORIO,CDPEDIDOLAB,RENTRADA,CNPJ,SITUACAO,DATACADASTRO 
                                            FROM PEDIDOLAB WHERE CDPEDIDO=ORDERID;
          atual :=divisao;
        
      ELSE
          INSERT INTO PEDIDOITEM SELECT CDPEDIDO,CNPJ,CDPRODUTO,QTPEDIDA,CDLABORATORIO,DATACADASTRO,DESCONTO 
                                            FROM PEDIDOITEM WHERE CDPEDIDO=CODIGO AND CDPRODUTO = C_PRODUTO;
          IF divisao != atual
            THEN
              SELECT PRAZO INTO prazo_pedido FROM DIVISAO WHERE CDLABORATORIO= cdlaboratorio;
              ADD_PARCEL(ORDERID, cnpj,prazo_pedido);
          END IF;
      
      END IF;
     
     EXIT WHEN C_DIVISAO%NOTFOUND OR C_PRODUTO%NOTFOUND;
    
    END LOOP;
    
    CLOSE C_DIVISAO;
    CLOSE C_PRODUTO;
   

 END PRAZO_DIVISAO;
END; 

alguém PODE ME AJUDAR COM ESSE ERRO..???
ulisses.vertuan
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qua, 04 Fev 2009 2:19 pm
Localização: bauru - sp

onde ta WHILE divisao = reg LOOP **************//ERRO AQUI

entenda WHILE divisao = primeira_divisao LOOP **************//ERRO AQUI
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

A essas horas, eu cito Steve Martin:
"Talking about music is like dancing about architecture."

Veja

Selecionar tudo

 WHILE divisao = reg LOOP
Você está comparando Número com ROWTYPE:

Selecionar tudo

  atual NUMBER:=0;
  divisao C_DIVISAO%ROWTYPE; 
Acho que tinha que ser assim:

Selecionar tudo

WHILE divisao.CDDIVISAO = reg LOOP
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 13 visitantes