Gabriel, Antes de mais nada, esse teu código está funcionando? Dando uma olhada aqui eu reparei que: - a declaração das variáveis L_VQBRLINHA, L_valor_novo, L_TESTE_QBR, L_FRA_cert e L_frase estão incorretas - o tipo de dados foi escrito errado; - está faltando END LOOP e END IF;
Corrige esse itens, executa o teu programa e se tiver dúvida posta de novo, com o programa funcionando, como está sendo a saída e como tu gostaria\entende que deveria ser. []´s Roberto Em 11 de fevereiro de 2013 14:42, gabriel Tomaz <gabriel_tom...@hotmail.com>escreveu: > > Com base no uso da SUBSTR alguém poderia validar ou aperfeiçoar o código > ou da dicas para melhorar. > > DECLARE > L_VFRASE VARCHAR2(240) := '&Digite uma Frase.';L_VFRASE_TEST > VARCHAR2(240);L_VFRASE_NOVO VARCHAR2(240);L_VQBRLINHA > VARCAHR2(240);L_valor_novo VARCAHR2(240);L_TESTE_QBR > VARCAHR2(240);L_FRA_cert VARCAHR2(240);L_frase > VARCAHR2(240);L_VFRASE_TEST1 VARCHAR2(240); > > BEGIN > FOR L_VFRASE > 100 LOOPIF DBMS_OUTPUT.put_line('Frase é maior que 100 > caracteres');L_VFRASE := INSTR( L_VFRASE,' ');L_VFRASE_TEST > := L_VFRASE + L_VFRASE_TEST;L_VFRASE_TEST := 0;L_VQBRLINHA > := L_VFRASE + L_valor_novo;L_VQBRLINHA := > -1;L_TESTE_QBR := SUBSTR(L_FRA_CERT,L_valor_novo);L_FRASE > := SUBSTR(L_FRA_CERT,L_VALOR_NOVO + LENGTH(L_FRA_CERT)); > IF L_VQBRLINHA <10 then > L_L_TESTE_QBR := (CONCAT(L_VFRASE_TEST1,''),L_TESTE_QBR); > END IF:dbms_output.put_line(L_VFRASE);dbms_output.put_line > (L_TESTE_QBR);dbms_output.put_line (L_FRASE); > dbms_output.put_line(L_VQBRLINHA); > END; > CC: oracle_br@yahoogrupos.com.br > To: oracle_br@yahoogrupos.com.br > From: alisson...@yahoo.com.br > Date: Mon, 11 Feb 2013 13:24:44 -0200 > Subject: Re: [oracle_br] Re: Duvida > > > > > > > > > > > > > > > > > > > > > > > > > > > Select subtr('teste',0,1) from dual; > > > > Nesse caso o resultado seria a letra 't' > > > > Enviado via iPhone Alisson Luz > > > > Em 11/02/2013, às 13:56, gabriel Tomaz gabriel_tom...@hotmail.com> > escreveu: > > > > > > > > > > > Estou dando uma lida aqui. Alguém teria algum exemplo dessa função SUBTR > ?No exemplo que digitei abaixo esta correto meu raciocínio? > > > To: oracle_br@yahoogrupos.com.br > > > From: jlchia...@yahoo.com.br > > > Date: Mon, 11 Feb 2013 14:47:54 +0000 > > > Subject: [oracle_br] Re: Duvida > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Bom, não vou me meter a codificar na prática (não serei > desmancha-prazeres tirando a sua alegria) mas : Imaginando que o limite da > linha é de 100 caracteres, E QUE o sql*plus já foi configurado com SET > LINESIZE 100, temos que : > > > > > > > > > > > > - se a linha é de 100 caracteres e a qtdade de colunas está definida na > variável V_QTD_COL (digamos), aí 100 / V_QTD_COL te dá o tamanho de cada > coluna em caracteres , são pedaços desse tamanho da string original que vc > vai ter que extrair > > > > > > - o principal comando para vc extrair uma substring a partir de uma > string maior é o SUBSTR, consulte a Documentação para vc aprender o uso dele > > > > > > - não há um "comando" para quebrar linhas no PL/SQL, nem na package > DBMS_OUTPUT (que é o que vc está usando) : o que vc vai ter que fazer é OU > inserir na string a ser exibida o(s) caracteres de controle que sinalizam > end of line (se o seu sistema operacional for Windows eles são CHR(13) || > CHR(10) , enquanto no Linux/Unix é só o CHR(13) > > > > > > - eu entendo que a idéia é que, se o fim da coluna não cai num espaço em > branco, vc terá que finalizar a substring do SUBSTR no primeiro espaço em > branco à esquerda da posição de fim da coluna e insreir uma quebra de linha > após o espaço, fazendo o restante cair na linha de baixo quando exibido : > provavelmente para isso vc vai precisar do INSTR, que procura a ocorrência > de um caracter > > > > > > > > > > > > A minha dica portanto é : Dá uma estudada nesses comandos que citei e > faz um esforço inicial, tenta escrever uma versão dessa lógica : não > conseguindo, a gente pode palpitar/tentar mostrar onde vc falhou, aí vc > escreve uma segunda versão, e aí vai até vc conseguir - é Assim que se > aprende, por tentativa e erro ... > > > > > > > > > > > > []s > > > > > > > > > > > > Chiappa > > > > > > > > > > > > --- Em oracle_br@yahoogrupos.com.br, gabriel Tomaz escreveu > > > > > > > > > > > > > > >> Alguem pode me ajudar na resolução desse exercício segue como esta > ficando: > > > > > >> estou usando sql*plus > > > > > >> DECLAREL_VFRASE VARCHAR2(240) := '&Digite uma Frase.';L_VFRASE_TEST > VARCHAR2(240);L_VFRASE_NOVO VARCHAR2(240);L_VQBRLINHA > VARCAHR2(240);BEGINFOR L_VFRASE > 100 LOOPIF DBMS_OUTPUT.put_line('Frase é > maior que 100 caracteres');L_VFRASE := INSTR( L_VFRASE,' ');L_VFRASE_TEST > := L_VFRASE + L_VFRASE_TEST;L_VFRASE_TEST := 0;L_VQBRLINHA :=END; > > > > > >> O exercício e o seguinte:Escreva um programa em que dado uma frase e a > quantidade de colunas que podem ser exibidas na tela, faça a quebra de > linhas sem quebrar as palavras. > > > > > >> Por exemplo, se passarmos a frase "Um pequeno jabuti xereta viu dez > cegonhas felizes." e pedirmos para ela ser exibida em 20 colunas, teremos > como resposta:Um pequeno jabutixereta viu dezcegonhas felizes. > > > > > >> Grato > > > > > >> To: oracle_br@yahoogrupos.com.br > > > > > >> From: gabriel_tomazc@... > > > > > >> Date: Sun, 10 Feb 2013 15:51:36 -0300 > > > > > >> Subject: Re: [oracle_br] Duvida > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >> Gostaria de fazer usando o sql plus. > > > > > > > > > > > > > > >> -----Original Message----- > > > > > > > > > > > > > > >> From: Milton Bastos Henriquis Jr. > > > > > > > > >> Sent: 10 Feb 2013 17:53:04 GMT > > > > > > > > >> To: oracle_br@yahoogrupos.com.br > > > > > > > > >> Subject: Re: [oracle_br] Duvida > > > > > > > > > > > > > > >> Gabriel, explique ONDE você quer fazer isso. > > > > > > > > > > > > > > >> Vc está estudando o que? SQL? > > > > > > > > >> Vc quer fazer isso aí no SQL*Plus? > > > > > > > > > > > > > > >> 2013/2/9 gabriel Tomaz gabriel_tomazc@...> > > > > > > > > > > > > > > >>> ** > > > > > > > > > > > > > > > > > > > > > > > > > > >>> Caros , gostaria de saber se podem me ajudar estou iniciando com > Oracle e > > > > > > > > >>> estou resolvendo alguns exercícios para aprimorar meus conhecimentos. > Estou > > > > > > > > >>> com o seguinte dificuldade: > > > > > > > > >>> Dado uma frase e a quantidade de colunas que podem ser exibidas na > tela, > > > > > > > > >>> faça a quebra de linhas sem quebrar as palavras. > > > > > > > > >>> Gostaria de saber se existe algum comando para fazer a quebra de linha > e > > > > > > > > >>> como ficaria meu bloco? > > > > > > > > >>> desde já agradeço. > > > > > > > > > > > > > > >>> [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >> [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > > >> ------------------------------------ > > > > > > > > > > > > > > >> ---------------------------------------------------------- > > > > > > > > >>> Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de > inteira responsabilidade de seus remetentes. > > > > > > > > >> Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > > > > > > > > >> ---------------------------------------------------------- > > > > > > > > >>> Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » > Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! > VISITE: http://www.oraclebr.com.br/ > > > > > > > > >> ---------------------------------------------------------- Links do > Yahoo! Grupos > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >> [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > ------------------------------------ > > > > > > ---------------------------------------------------------- > > >> Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de > inteira responsabilidade de seus remetentes. > > > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > > > ---------------------------------------------------------- > > >> Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » > Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! > VISITE: http://www.oraclebr.com.br/ > > > ---------------------------------------------------------- Links do > Yahoo! Grupos > > > > > > > > > > > > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > ------------------------------------ > > > -------------------------------------------------------------------------------------------------------------------------- > >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de > inteira responsabilidade de seus remetentes. > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > > -------------------------------------------------------------------------------------------------------------------------- > >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » > Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! > VISITE: http://www.oraclebr.com.br/ > ------------------------------------------------------------------------------------------------------------------------ > Links do Yahoo! Grupos > > > [As partes desta mensagem que não continham texto foram removidas]