Arrays

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
Avatar do usuário
MuLtAnI
Moderador
Moderador
Mensagens: 90
Registrado em: Ter, 01 Jun 2004 9:21 am
Localização: Videira - SC
Contato:

estou com problemas na manipulação de arrays aqui, o que eu preciso é armazenar strings no array para depois buscar pelo índice o valor e passar numa consulta sql

aqui o código

Selecionar tudo

begin
   declare
      L_CDUSUA  CHAR(20)   := LTRIM('mrg');
      L_CDEMP   CHAR(2)    := '01';
      L_CDFIL   CHAR(4)    := '0002';
      L_mês     CHAR(2)    := '07';
      L_ANO     CHAR(4)    := '2004';
      
-- CRIA UM ARRAY COM ÍNDICES PARA TRABALHAR COM OS 7 VALORES POSSÍVEIS NAS DATAS NECESSÁRIAS

     TYPE CAMPOSTAB IS TABLE OF VARCHAR2(50) index by Binary_Integer;
     P1 CAMPOSTAB;
     J NUMBER(1) := 1;


-- ------------------------------Valores representativos dos Índices do Array
--******** 1 = Volumes(Cab)
--******** 2 = Volumes Kg
--******** 3 = Peso Médio
--******** 4 = Faturamento R$
--******** 5 = Faturamento Cab
--******** 6 = Quilos Equivalentes
--******** 7 = Preço Médio 
-- --------------------------------------------------------------------------

EXCEPT_ERR  EXCEPTION;
  
BEGIN
   
   P1(1) := 'CPDITS.QTPRO';
   P1(2) := 'CPDITS.PSPRO';
   P1(3) := 'CPDITS.VLUNITPRO';
   
-- LOOP PARA PASSAR POR TODOS OS P1 ARMAZENADOS NO ARRAY
WHILE J <= 3 LOOP

-- Loop para valores no mês corrente   
   FOR CARGA IN(
      
	 SELECT
	     -- SELECIONA O CAMPO PASSADO NO ARRAY E O IDENTIFICADOR QUE É IGUAL AO ÍNDICE DO ARRAY
         (ADFSTPTIT.CDSTPTIT) CDSTPTIT, (MIN(ADFSTPTIT.DESTPTIT)) DESTPTIT, 
         (SUM(P1(J))) VLMES, (MAX(J)) IDTPINF
      FROM
         CADPRO,
         CPDITS,
         CPDNFS,
         CPDVTS,
         ADFSTPTIT
      WHERE
         CADPRO.CDPRO = CPDITS.CDPRO AND
         CPDITS.CDEMP = CPDNFS.CDEMP AND
         CPDITS.CDFIL = CPDNFS.CDFIL AND
         CPDITS.NUDOC = CPDNFS.NUDOC AND
         CPDITS.CDSERIE = CPDNFS.CDSERIE AND
         CPDITS.CDSUBSERIE = CPDNFS.CDSUBSERIE AND
         CPDNFS.CDEMP = CPDVTS.CDEMP AND
         CPDNFS.CDFIL = CPDVTS.CDFIL AND
         CPDNFS.NUDOC = CPDVTS.NUDOC AND
         CPDNFS.CDSERIE = CPDVTS.CDSERIE AND
         CPDNFS.CDSUBSERIE = CPDVTS.CDSUBSERIE AND
         CPDVTS.CDEMP = ADFSTPTIT.CDEMP AND
         CPDVTS.CDFIL = ADFSTPTIT.CDFIL AND
         CPDVTS.CDTPTIT = ADFSTPTIT.CDTPTIT AND
         CPDVTS.CDSTPTIT = ADFSTPTIT.CDSTPTIT AND 
	    CADPRO.CDPRO IN (SELECT CDPRO FROM CADPRO WHERE TPESTRUT = '11' AND CDESTRUT LIKE '1%') AND
         CPDNFS.DTEMI = TO_DATE(L_mês||'/'||L_ANO,'MM/YYYY') AND
	     ADFSTPTIT.CDEMP = L_CDEMP AND
	     ADFSTPTIT.CDFIL = L_CDFIL
	  GROUP  BY ADFSTPTIT.CDSTPTIT) LOOP
         
		 -- INSERE RESULTADO DA VIEW EXPLÍCITA NA TABELA MTRZ221
		  
	     INSERT INTO MTRZ221 (CDSTPTIT, DESTPTIT, IDTPINF, VLMES, CDUSUA, CDEMP, CDFIL)
	     VALUES(CARGA.CDSTPTIT, CARGA.DESTPTIT, CARGA.IDTPINF, CARGA.VLMES, L_CDUSUA, L_CDEMP, L_CDFIL); 
	  
	  END LOOP;
	  
	  COMMIT;
	 

commit;
EXCEPTION
when others then
    rollback;
    raise;
  END;
END;

se alguém puder me dar uma dica aí eu agradeço, tenter trabalhar com VARRAY mas não deu muito certo também, como se os índices não estivessem sendo carregados!!!


agradeço desde já....abraços
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

Ola Multani

veja se isso não te ajuda:
http://glufke.net/oracle/viewtopic.php?t=61

[]s
Avatar do usuário
MuLtAnI
Moderador
Moderador
Mensagens: 90
Registrado em: Ter, 01 Jun 2004 9:21 am
Localização: Videira - SC
Contato:

Na verdade não Glufke, o que acontece é o seguinte, se eu usar para o array armazenar valores to tipo da coluna da tabela por exemplo com tabela.coluna%type eu ainda assim não conseguiria fazer o que eu preciso, pois eu preciso passar o valor contido no índice do array para a instrução select o que não dá certo pois o meu array é do tipo VARCHAR2 e sendo assim eu estaria trazendo uma string e não os valores contidos em uma tabela ...

obrigado pela ajuda!!!

[]'s
Responder
  • Informação
  • Quem está online

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