Hoje gostaria de postar um script bem simples mas que pode ser muito util quando se necessita dropar um lote de objetos que tenham uma determinada "caracteristica" em comum. O exemplo pode nao resolver seu problema, mas certamente servira de ideia se voce realmente estiver precisando.Bom, no exemplo que estou postando, tenho na tabela GEUSUARI os codigos dos usuarios do sistema. Quero apagar todas as tabelas que estejam variando o nome por codigo de usuario. Vejamos como fica o script para resolver esse probleminha... use SUABASE --primeiramente temos um cursor que ira ler todos os objetos do MSSQL --levando em consideracao a restricao imposta na clausula where declare tabelas_cursor cursor for select name from sysobjects where xtype = 'U' and right(name,3) in (select cd_usuario from GEUSUARI with(nolock) where usuario <> 'SUPERVISOR') order by name open tabelas_cursor declare @objeto sysname fetch next from tabelas_cursor into @objeto --laco while que ira ler todos os objetos retornados do cursor while @@fetch_status <> -1 begin --executa SQL dinamico exec('drop table ' + @objeto+'') fetch next from tabelas_cursor into @objeto end print 'Todas as tabelas de usuario foram apagadas.' close tabelas_cursor deallocate tabelas_cursor Bom, fazendo isso todas as tabelas que tenham no final do seu nome um codigo de usuario do sistema foram dropadas.Valeu! Pessoal, sei que ja faz bastante tempo que nao posto alguma novidade no blog. Mas hoje vou compartilhar uma procedure que pode ser util para geracao de sequenciais que deve-se considerar caracteres numericos e do alfabeto (0-9, A-Z e a-z).Um exemplo de utilidade, seria gerar uma faixa assim: A01 - A10. Essa procedure lhe retornara A01, A02, A03, A04, A05, A06, A07, A08, A09 e A10, por exemplo.Vamos ao codigo fonte da nossa procedure entao... os comentarios existentes na procedure explicam a logica e as validacoes existentes...create or replace procedure PR_GERASEQUENCIALNS(p_seqIni varchar2, p_seqFin varchar2, p_considerarAlpha number) is v_seqIni varchar2(50); v_seqFin varchar2(50); v_considerarAlpha boolean; v_somaNumericosIni number; v_somaNumericosFin number;begin --atualiza variaveis virtuais... v_seqIni := p_seqIni; v_seqFin := p_seqFin; if p_considerarAlpha = 1 then v_considerarAlpha := true; else v_considerarAlpha := false; end if; --preenche com zeros a frente os sequenciais para terem o mesmo tamanho... if length(v_seqIni) > length(v_seqFin) then v_seqFin := lpad(v_seqFin, length(v_seqFin), '0'); elsif length(v_seqIni) < length(v_seqFin) then v_seqIni := lpad(v_seqIni, length(v_seqIni), '0'); end if; --avalia as restricoes dos parametros para prosseguir... --primeira restricao: o posicionamento dos caracteres deve ser identico, ou seja, um maisculo deve corresponder ao maisculo. --segunda restricao: tambem deve-se levar em consideracao que se o parametro p_considerarAlpha for 0 e for enviado A98 - B01, por exemplo, nenhum --sequencial sera impresso, pois for i in 1 .. length(v_seqFin) loop --avalia se a sequencia inicial pertence a faixa de numericos da tabela ASCII e os sequencial final nao.. if ascii(substr(v_seqIni, i, 1)) between 48 and 57 and ascii(substr(v_seqFin, i, 1)) not between 48 and 57 then raise_application_error(-20001,'Existe inconsistencia entre os caracteres da posicao '||i||'. Reavalie os sequenciais.'); --avalia se a sequencia inicial pertence a faixa de alfabeticos maiscula da tabela ASCII e os sequencial final nao.. elsif v_considerarAlpha and ascii(substr(v_seqIni, i, 1)) between 65 and 90 and ascii(substr(v_seqFin, i, 1)) not