segunda-feira, 14 de dezembro de 2009
Como fazer para identificar via select o hostname de um banco.
select utl_inaddr.get_host_name, utl_inaddr.get_host_address
from dual;
T+
sábado, 29 de agosto de 2009
Substituindo um caracter no campo VARCHAR2
Alguém já precisou fazer uma substituição de um caracter em um campo varchar2?
Segue o exemplo que tive.
Ao consultar a tabela de telefone do cliente obtive o seguinte resultado:
SELECT * FROM TELEFONE;
CODIGO FONE
--------------------------------------- --------------
1 (011)4067/4544
2 (011)4547/3732
3 (011)8556/4564
4 (011)1235/9654
Na exibição do campo FONE, o cliente queria trocar o caracter '/’ pelo ‘-‘, o único jeito que encontrei foi……
SELECT CODIGO, SUBSTR(FONE,1,9)||'-'||SUBSTR(FONE,11,14) FONE FROM TELEFONE;
CODIGO FONE
--------------------------------------- --------------
1 (011)4067-4544
2 (011)4547-3732
3 (011)8556-4564
4 (011)1235-9654
T+
quarta-feira, 27 de maio de 2009
Dropando um Database no Oracle 10G
Desde 10g, é possível excluir uma base de dados da Oracle 10g com o novo comando SQL DROP DATABASE.
O comando se livra dos datafiles, redo log files, controlfiles e spfile.
Segue o exemplo do comando, lembrando que o mesmo deve ser executado conectado como SYSDBA:
shutdown abort;
startup mount exclusive restrict;
drop database;
T+
quarta-feira, 20 de maio de 2009
Habilitando a package DBMS_OUTPUT
A Package DBMS_OUTPUT, através da Procedure PUT_LINE, envia as mensagens após uma Transação efetuada com sucesso.
Para que a Package seja habilita e as mensagens sejam apresentadas, basta executar o seguinte comando no prompt do ORACLE:
SET SERVEROUTPUT ON;
Para testar execute a package para que seja mostrada a mensagem:
DBMS_OUTPUT.PUT_LINE(‘Teste da package’);
Para que a package seja desabilitada execute o seguinte comando:
SET SERVEROUTPUT OFF;
Execute novamente a chamada da package DBMS_OUTPUT e perceba que a mensagem não é mais apresentada.
T+
Formas de disparar uma Trigger
A TRIGGER ou GATILHO, nada mais é do que uma “procedure” que é disparada conforme um acontecimento, para alteraçoes em tabelas temos os seguintes eventos:
BEFORE INSERT - Dispara uma vez antes de uma transação INSERT
BEFORE INSERT FOR EACH ROW - Dispara antes de cada novo registro criado/inserido.
AFTER INSERT - Dispara uma vez depois de uma transação INSERT
AFTER INSERT FOR EACH ROW - Dispara depois de cada novo registro criado/inserido.
BEFORE UPDATE - Dispara uma vez antes de uma transação UPDATE
BEFORE UPDATE FOR EACH ROW - Dispara antes de cada novo registro alterado.
AFTER UPDATE - Dispara uma vez depois de uma transação UPDATE
AFTER UPDATE FOR EACH ROW - Dispara depois de cada novo registro alterado.
BEFORE DELETE - Dispara uma vez antes de uma transação DELETE
BEFORE DELETE FOR EACH ROW - Dispara antes de cada novo registro apagado.
AFTER DELETE - Dispara uma vez depois de uma transação DELETE
AFTER DELETE FOR EACH ROW - Dispara depois de cada novo registro apagado.
T+
Renomeando uma primary key
Primeiro vamos criar uma tabela chamada NOTA_FISCAL
create table NOTA_FISCAL (NOTA_ID number(38));
Depois criamos a PRIMARY KEY
alter table NOTA_FISCAL add constraint PK_NOTA primary key(NOTA_ID);
Agora vamos para a parte que interessa, vamos alterar o nome da primary key (PK_NOTA) para PK_NOTA_FISCAL
alter table NOTA_FISCAL rename constraint PK_NOTA to PK_NOTA_FISCAL;
Sabemos que ao criar uma primary key automaticamente um index é criado com o mesmo nome da primary key, não é necessário mas para mantermos o padrão de nosso banco de dados vamos alterar o nome do index também.
alter index PK_NOTA rename to PK_NOTA_FISCAL;
T+
segunda-feira, 4 de maio de 2009
TYPE% VS % ROWTYPE - Qual é a diferença?
Ambos são usados para definir variáveis no PL/SQL da mesma forma como está definido na base de dados. Se o tipo ou precisão de uma coluna for alterada, o bloco/programa PL/SQL automaticamente pega a nova definição da coluna na base de dados.
O type% e ROWTYPE% ajuda a reduzir custos de manutenção permitindo que os programas se adaptem ao banco de dados com as alterações realizadas nas colunas.
TYPE% é utilizado para declarar uma variável com o mesmo tipo de uma determinada coluna da tabela:
DECLARE
v_EmpName emp.ename%TYPE;
BEGIN
SELECT ename INTO v_EmpName FROM emp WHERE ROWNUM = 1; DBMS_OUTPUT.PUT_LINE('Name = ' || v_EmpName);
END;/
ROWTYPE% é usado para declarar uma variavel contendo todos os campos de uma tabela, ou seja, é usado para armazenar uma linha da tabela:
DECLARE v_emp emp%ROWTYPE;
BEGIN
v_emp.empno := 10;
v_emp.ename := 'XXXXXXX';
END;/
T+
quinta-feira, 2 de abril de 2009
Oracle - Renomeando Tabelas
Para renomear uma tabela, basta executar o seguinte comando
Alter table <nome_tabela> rename to <novo_nome_tabela>;
T+....
terça-feira, 31 de março de 2009
Mover um INDEX para uma Tablespace diferente
Para mover um indice para outra tablespace execute os seguintes passos:
1) Primeiro verifique quais as tablespaces disponíveis utilizando a seguinte consulta:
select tablespace_name from User_Tablespaces;
2) Verifique qual tablespace o INDEX esta armazenado utilizando o seguinte comando:
select * from user_indexes;
3) Em seguida altere o tablespace do index desejado:
Alter index <index-name> rebuild
tablespace <new-tablespace>;
Até +
segunda-feira, 30 de março de 2009
Reconstruindo o Ìndice
A maneira mais simples para a reconstrução do índice é:
Alter index <index-name> rebuild tablespace <index-tablespace>;
O camando também tem a vantagem de não impedir o índice de ser utilizado enquanto está sendo reconstruído. O Tablespaces deve ser informado, caso contrário, o índice será reconstruído no tablespace atual (padrão) do usuário.
Reconstruir o índice também permite que novos parâmetros(campos) possam ser atribuídos ao índice.
Se o índice estiver danificado, ele deve ser excluído e recriado.
Em primeiro lugar, devemos identificar o índice e seus campos, para isso utilizamos as seguintes consultas:
SELECT COLUMN_NAME FROM USER_IND_COLUMNS
WHERE INDEX_NAME = 'index_name';SELECT TABLE_NAME, UNIQUENESS, TABLESPACE_NAME, INITIAL_EXENT, NEXT_EXTENT, MIN_EXTENTS, MAX_EXTENTS,PCT_INCREASE, PCT_FREE FROM USER_INDEXES WHERE INDEX_NAME = 'index_name';
Excluindo o índice:Drop index <index-name>;
Recriando o índice: Create [UNIQUE] index <index-name> on <tablea-name> (<coluna1>,<colunaN>) tablespace <tablespace-name>;Lembrando que para a PRIMARY KEY ou UNIQUE KEY o índice é criado automaticamento na criação da constraint;
Até a próxima.....