Procedure que busca todas as tabelas com o mesmo inicio?

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
analima.ilha
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 14
Registrado em: Qua, 14 Mar 2012 12:41 pm
Atenciosamente,

Ana Lima.

Preciso fazer uma procedure que busque todas as tabelas com inicio "tblw"

e não sei qual logica usar, alguém pode me ajudar?
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Boa tarde.

Tenta essa querie:

Selecionar tudo


select *
  from all_tables
 where table_name like 'TBLW%' 
Lembrando que, o conteúdo de table_name é maiúsculo.
Qualquer coisa, manda pra gente.
analima.ilha
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 14
Registrado em: Qua, 14 Mar 2012 12:41 pm
Atenciosamente,

Ana Lima.

Eu usei essa query

so que preciso usar isso dentro de uma procedure, e não to conseguindo..
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Dentro de procedure é necessário atribuir a uma variável o retorno do select.
Não se pode fazer um simples "select ... from". É preciso fazer um:

Selecionar tudo

SELECT ....
INTO...
FROM ...
WHERE...
analima.ilha
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 14
Registrado em: Qua, 14 Mar 2012 12:41 pm
Atenciosamente,

Ana Lima.

Mesmo assim não funcionou

já tentei um cursor... mas também não funciona...
=S

criado com erros de compilaçao.
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Qual erro e o trecho correspondente?
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Você deseja retornar para algum front end? .NET ? Java ?
Caso positivo, aqui no fórum dá uma pesquisada por REF CURSOR, que vai achar exemplos interessantes, como este:
Ref Cursor

Qualquer coisa, manda pra gente.
analima.ilha
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 14
Registrado em: Qua, 14 Mar 2012 12:41 pm
Atenciosamente,

Ana Lima.

Esta assim:

Selecionar tudo

  cursor c1 is (SELECT object_name from dba_objects WHERE object_name LIKE '%CMD%');
   BEGIN
   
    dbms_output.put_line('inicio');
    
    FOR employee_rec in c1
    LOOP
    dbms_output.put_line(employee_rec.object_name);
    END LOOP;
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Tirando o fato do "END;" no final do teu código, não vejo problemas nesta procedure:

Selecionar tudo

DECLARE
cursor c1 is (SELECT object_name from dba_objects WHERE object_name LIKE '%CMD%');
BEGIN

dbms_output.put_line('inicio');

FOR employee_rec in c1
LOOP
dbms_output.put_line(employee_rec.object_name);
END LOOP;
END;
Até executei aqui sem problemas.
Talvez seja problema de permissão.
analima.ilha
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 14
Registrado em: Qua, 14 Mar 2012 12:41 pm
Atenciosamente,

Ana Lima.

Pois é,

ele foi criada dentro de body package

nem sei porque não ta funcionando...
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Se você executa este codigo acima que postei sem problemas.
Então o problema é a permissão do usuário que esta executando a procedure.
analima.ilha
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 14
Registrado em: Qua, 14 Mar 2012 12:41 pm
Atenciosamente,

Ana Lima.

Ta sendo criada com erros de compilacao.... =/
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Qual o erro??
analima.ilha
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 14
Registrado em: Qua, 14 Mar 2012 12:41 pm
Atenciosamente,

Ana Lima.

esse erro:


PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

O trecho que você postou aqui só falta a declaração da procedure e o "END;". Aparentemente esta parte está OK.
Verifique se está tudo certo, todos ";" nos lugares e os ENDs (END, END LOOP, END IF) corretos.
analima.ilha
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 14
Registrado em: Qua, 14 Mar 2012 12:41 pm
Atenciosamente,

Ana Lima.

Agora estou com outro problema


Tenho essa procedure que busca todas as tabelas com esse inicio
e agora quero pegar alguns campos dessas tabelas e apagar eles...

tenho que fazer esse delete dentro dessa procedure pra apagar esses dados de todas essas tabelas...


alguma dica?
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Bem,
depois de você ter selecionado as tabelas que quer deletar as informações, basta montar um sql dinamico, ou seja, construir em texto o comando para deletar as tabelas:

Selecionar tudo

EXECUTE IMMEDIATE 'Delete from ' || cursor.tabela ;
analima.ilha
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 14
Registrado em: Qua, 14 Mar 2012 12:41 pm
Atenciosamente,

Ana Lima.

No caso ficou assim

Selecionar tudo

stmt := NULL;
		stmt:= 'DELETE FROM ' ||  i.object_name || ' WHERE ID IN(' || chr(13)|| chr(10);
		stmt:=stmt || 'select COMMAND_CT.ID from ' ||  i.object_name || ' COMMAND_CT' || chr(13)|| chr(10);
		stmt:=stmt || ' inner join IPMP_NGN_EXECUTE_COMMAND_CT ' || chr(13)|| chr(10);
		stmt:=stmt || ' on( ' || chr(13)|| chr(10);
		stmt:=stmt || ' COMMAND_CT.EXECUTE_COMMAND_ID = IPMP_NGN_EXECUTE_COMMAND_CT.ID ' || chr(13)|| chr(10);
		stmt:=stmt || ' ) ' || chr(13)|| chr(10);
		stmt:=stmt || ' inner join IPMP_NGN_ELABOR_JOB_CT ' || chr(13)|| chr(10);
		stmt:=stmt || ' on( ' || chr(13)|| chr(10);
		stmt:=stmt || ' IPMP_NGN_EXECUTE_COMMAND_CT.ELABOR_JOB_ID = IPMP_NGN_ELABOR_JOB_CT.ID ' || chr(13)|| chr(10);
		stmt:=stmt || ' ) ' || chr(13)|| chr(10);
		stmt:=stmt || ' WHERE ' || chr(13)|| chr(10);
		stmt:=stmt || ' IPMP_NGN_ELABOR_JOB_CT.START_DATE < (SYSDATE - 15) ' || chr(13)|| chr(10);
		stmt:=stmt || ' ) ' || chr(13)|| chr(10);
		
		dbms_output.put_line(stmt);
Editado pela última vez por analima.ilha em Qui, 19 Abr 2012 2:11 pm, em um total de 1 vez.
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Quando for escrever uma mensagem, tem uma lista de botões acima da área do texto.
Tem um botão "Code"(dentre outros), que basta clicar lá após selecionar o código.

Querendo se aprofundar só dar uma olhada em "BB codes".
analima.ilha
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 14
Registrado em: Qua, 14 Mar 2012 12:41 pm
Atenciosamente,

Ana Lima.

Esse EXECUTE IMMEDIATE tem que vim no inicio??


eu chamei ele no final.
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Exato, no início, antes de seu comando. Como postei anteriormente.
analima.ilha
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 14
Registrado em: Qua, 14 Mar 2012 12:41 pm
Atenciosamente,

Ana Lima.

Obrigada pela ajuda =)
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

De nada.
Ajudamos sempre que podemos. :)
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Majestic-12 [Bot] e 12 visitantes