Bom dia senhores,
Sei que aqui tem alguns camaradas feras em pl/sql, que não é muito a
minha praia, mas todo DBA que tem que saber pelo menos o básico para se
virar.
Bom a questão é o seguinte:
Tenho o código abaixo que está funcionando, porém achei que é uma
maneira meia cretina de se varrer uma string e derepente estou
escrevendo código demais e não performático.
Atenciosamente,
Rodrigo Mufalani
OCP10g
==================================================================================================
SET SERVEROUT ON
DECLARE
TYPE TTEXTO IS TABLE OF PRODTUR_PRT.PRT_DSPRODUTO%TYPE;
TYPE TTIPO IS TABLE OF PRODTUR_PRT.PRT_CDTIPOPROD%TYPE;
TYPE TCODI IS TABLE OF PRODTUR_PRT.PRT_CDPRODUTO%TYPE;
TEXTO TTEXTO;
TIPO TTIPO;
CODI TCODI;
VPOSICAOFRASE INTEGER;
VRESULTADO INTEGER;
NOITE VARCHAR2(100);
LINHAS NUMBER;
BEGIN
-- INCIALIZACAO DAS VARIAVEIS
DBMS_OUTPUT.ENABLE(2000000);
VPOSICAOFRASE := 1;
NOITE := '';
SELECT PRT_DSPRODUTO
,PRT_CDTIPOPROD
,PRT_CDPRODUTO
BULK COLLECT INTO TEXTO, TIPO , CODI
FROM PRODTUR_PRT
WHERE PRT_CDTIPOPROD IN ('07','57') AND
PRT_LIBERADO = 'S';
FOR I IN TEXTO.FIRST..TEXTO.LAST LOOP
WHILE VPOSICAOFRASE <= LENGTH(TEXTO(I)) LOOP
IF SUBSTR(TEXTO(I),VPOSICAOFRASE,1) BETWEEN '0' AND '9' THEN
-- VERIFICA SE EXISTE CARACTER NUMERICO EM TEXTO(I)
NOITE := SUBSTR(TEXTO(I),VPOSICAOFRASE,2);
VPOSICAOFRASE := LENGTH(TEXTO(I)) +100;
ELSE
-- VAI PARA A PROXIMA POSICAO NA STRING TEXTO(I)
VPOSICAOFRASE := VPOSICAOFRASE + 1;
END IF;
END LOOP;
BEGIN
-- FAZER O UPDATE DO CAMPO DE NOITES AQUI
UPDATE PRODTUR_PRT SET PRT_NUMERONOITE = TO_NUMBER(NOITE)
WHERE PRT_CDTIPOPROD = TIPO(I) AND PRT_CDPRODUTO = CODI(I);
-- LIMPANDO AS VARIAVEIS
NOITE := '';
VPOSICAOFRASE := 1;
EXCEPTION WHEN INVALID_NUMBER THEN
-- UPDATE COM O PRIMEIRO VALOR POIS O SEGUNDO É LIXO
NOITE := SUBSTR(NOITE,1,1);
UPDATE PRODTUR_PRT SET PRT_NUMERONOITE = TO_NUMBER(NOITE)
WHERE PRT_CDTIPOPROD = TIPO(I) AND PRT_CDPRODUTO = CODI(I);
NOITE := '';
VPOSICAOFRASE := 1;
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE ('NAO FOI POSSIVEL ALTERAR PRODUTO
==>'||TEXTO(I));
END;
END LOOP;
END;
/
--------------------------------------------------------------------------------
Na Oi Internet você ganha ou ganha. Além de acesso grátis com
qualidade, você pode ter contas ilimitadas de email com 1 giga cada uma,
suporte grátis e muito mais. Baixe grátis o Discador Oi em
http://www.oi.com.br/discador e comece a ganhar.
Agora, se o seu negócio é voar alto na internet,
assine Oi Internet Banda Larga e ganhe o modem grátis. Clique em
http://www.oi.com.br/bandalarga e aproveite essa moleza!