Mesmo aquele DBA - aquele mesmo que tem os dedos mais ágeis que o Thanos e sua manopla do infinito - já teve essas dúvidas. Nada do velho, blá-blá, de JOIN vs OUTER JOIN. Se você não sabe a diferença GET-BACK-NOW ! To falando de duvidas reais de todo PL-JOBBER seja programador ou administrador, tem ou teve ou vez em quando tem de se lembrar. Não sou eu quem digo, é o velho e bom blog do ask-to-tom:
1. Como obter o número aproximado de linhas nas minhas tabelas ?
select table_name, num_rows from all_tables;
2. Quando usar IN / EXISTS (ou NOT IN / NOT EXISTS ) ?
Se você possui uma lista limitada (pequena em geral) use IN. Se a lista demandar muitos joins e/ou filtros, use EXISTS !
3. Como mostrar CLOBS no result set?
select code, data, to_char(coluna_clob) from table;
4. Como exportar um database para um arquivo de Backup ?
exp system/manager@sua_instancia FULL=Y FILE=FULL_BACKUP.DMP
5. Como importar um database ?
imp system/manager@sua_instancia FULL=Y FILE=FULL_BACKUP.DMP
6. Formatando datas e números:
select to_char(sysdate,'dd/mm/yyyy hh24:mi:ss'), trim(to_char(1324323.45,'9999999990D99')) from dual
7. Como atualizar milhões de linhas em uma tabela com milhões de registros de alguma maniera mais rápida ?
CPU sobrando, então:
UPDATE OWNER.EMPREGADOS /*+ NOLOGGING PARALLEL(8) */
SET SALARIo = SALARIO * 10
WHERE CARGO IN ('DBA','CONSULTOR');
Mas meu AUXDB estoura ! Então divida em lotes menores !
FOR X in (CONDICAO)
LOOP
UPDATE OWNER.EMPREGADOS /*+ NOLOGGING PARALLEL(8) */
SET SALARIo = SALARIO * 10,
status = 'ATUALIZADO'
WHERE CARGO IN ('DBA','CONSULTOR')
and rownum < 100000
and status = 'NAO_ATUALIZADO';
END LOOP;
8. Como inserir milhõesde linhas de maneira rápida ?
create destino
as
( select * from origem
where <condicoes>
)
alter table original rename to original_bkp;
alter table destino rename to original;
-- recriar indices ...
9. Como excluo dados de uma tabela inteira ?
Muito esquecido, mesmo pelos experientes:
truncate table table_name;
10. Adicionar quebra de linha nos meus updates ?
update banana_logger
set texto = texto || chr(13) || chr(10) || ' Finalizando processo de expurgo !';
