[Começando hoje] Imprimir vários resultados de select

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
GPet
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Sex, 03 Ago 2012 3:38 pm

Boa tarde galera.
Bom, meu primeiro dia brincando com Oracle, então me desculpem se for uma pergunta bem tonta.
Seguinte, estou criando uma procedure que contém um select que seleciona todos os registros em que o campo arquivo_criado é nulo. A partir do resultado, eu gostaria que ela imprimisse um por um no output ( assim que conseguir, vou criar um arquivo csv e exportar estes dados pra lá - UTL FILE, certo? - .
Bom, aqui vai o código até o momento.

Selecionar tudo

create or replace procedure Proc_Cria is
  LinhaCSV varchar2(10000);
  LinhaContemCSV   varchar2(1000);

begin

  for LinhaCSV_ in (select *
                             from web_acesso spt
                             where spt.arquivocriado is null) 
  loop
                            
              Select NOMEALUNO || ';' || RA || ';' || RG || ';' || DIGITORG || ';' ||
                     Estadoemissor || ';' || to_char(EMISSAORG, 'DD/MM/YYYY') || ';' || Sexo || ';' ||
                     to_char(NASCIMENTO, 'DD/MM/YYYY') || ';' || NUMERO || ';' ||
                     NUMEROAPARTAMENTO || ';' || BLOCO || ';' || COMPLEMENTO || ';' || CEP || ';' ||
                     TELEFONE || ';' || CELULAR || ';' || EMAIL || ';' || responsavel || ';' ||
                     CodigoPais || ';' || CodigoCursoSPtrans || ';' || CodigoTurma || ';'
              into LinhaContemCSV
              from web_acesso spt;
              -- where  spt.arquivocriado is not null;
              dbms_output.put_line(LinhaContemCSV);
  end loop;

end;

O erro dado é ORA-01422: exact fetch returns more than requested number of rows.
Oque estou fazendo errado? Caso tenham uma solução mais fácil, favor informar.
Muito obrigado.
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Isso, criar arquivo com UTL_FILE.
Quanto ao seu erro, é um erro comum inicialmente.

Selecionar tudo

Select ...
   into LinhaContemCSV
  from web_acesso spt;
-- where  spt.arquivocriado is not null;
Quando se usa INTO, ele atribui 1 LINHA. Se o retono do select for maior que uma linha você sempre terá este erro.

Outra coisa, porque o select de dentro se , teoricamente, são os mesmos dados do cursor??? O cursor não é utilizadado para nada alem de ficar "LOOPando".

você deve tratar seus dados do cursos para compor sua "linha":

Selecionar tudo

LinhaContemCSV := LinhaCSV_.NOMEALUNO || ';' || LinhaCSV_.RA || ';' || LinhaCSV_.RG ... ;
GPet
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Sex, 03 Ago 2012 3:38 pm

Cara, consegui! está rodando bonitinho, muito obrigado! :D

Agora descobri uma coisa... o pessoal por aqui é meio chato para liberar acesso ao servidor para que eu possa usar o UTL_FILE.

alguém conhece algum outro modo fácil para eu exportar os resultados para um arquivo CSV?
Obrigado!!
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

Sim, se você tiver que fazer isso apenas 1 vez, tem como usar alguma ferramenta tipo: PLSQL DEVELOPER, ou SQL DEVELOPER (gratis, da própria oracle).

Mas tem também como gerar isso via SQL*Plus
http://glufke.net/oracle/viewtopic.php?t=2170
GPet
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Sex, 03 Ago 2012 3:38 pm

E aí, primeiramente muito obrigado pela ajuda.
Eu preciso executar isso várias vezes, então provavelmente vou usar o Spool mesmo.

Minha dúvida é, eu consigo armazenar isso em alguma procedure e chamar pelo PL/SQL ou em um .bat sem precisar ser pelo Command Windows do PL/SQL?
Responder
  • Informação