Superátomo magnético

Agência FAPESP – Um grupo internacional de pesquisadores descobriu um aglomerado estável de átomos capaz de representar diferentes elementos da tabela periódica.

Chamado de “superátomo magnético”, a novidade, segundo os cientistas, poderá ser usada na criação de componentes eletrônicos moleculares para equipar a próxima geração de computadores, que seriam muito mais rápidos e com maior capacidade de armazenamento.

O aglomerado, composto por um átomo de vanádio e oito de césio, atua como um pequeno ímã capaz de simular um único átomo de manganês em força magnética, enquanto permite que elétrons de orientação de spin específicas sejam atraídos pela camada de átomos de césio.

O estudo, conduzido por Shiv Khanna, da Virginia Commonwealth University, nos Estados Unidos, e colegas de outras instituições do país e da Índia, foi publicado no site da revista Nature Chemistry.

Por meio de uma série elaborada de estudos teóricos, o grupo examinou as propriedades eletrônicas e magnéticas de aglomerados contendo um átomo de vanádio envolto por múltiplos átomos de césio.

Continue lendo →


Usando Expressão regular em Check Constraint, > 10g

A um tempo atras tive que criar algumas check's para bloquear palavras de um campo, hoje no lugar das dezenas de checks constraints que criei troquei todas por uma unica.
Vou dar um exemplo simples mostrando como funciona e a expressao regular ajudou nesta questão.

Exemplo: Bloquear o campo titulo da tabela gn_globo para que não receba referencias exatas da concorrencia nesta.
A primeira idéia foi utilizar a função instr e minha check:

  1. ALTER TABLE gn_globo
  2. ADD constraint glb_titulo_ban_sbt_ck CHECK
  3. ( instr(lower(titulo), 'sbt') = 0 );
  4. <a href="http://www.rstoever.com/2008/11/29/usando-expressao-regular-em-check-constraint-10g/#more-209" class="more-link">Continue lendo →</a>

Alteração DDL em objetos relacionados

Bom hoje vou abordar uma situação que ocorre muito e claro não se tem muito impacto pois o que vou mostrar é como a Oracle nos ajuda em muitas situações.
Vou criar uma tabela de exemplo e criar uma procedure que chama essa tabela, até ai tudo bem, mas se eu fizer alguma alteracao na estrutura desta o que vai acontecer. É os objeto que estão relacionados a esta tabela ficarão INVALIDOS, mas não há necessidade de ficar preocupado que sua aplicação irá parar de funcionar.
Pois ao ser executado o objeto, este é tentado ser rencopilado e dps executado.
Para ser mais facil de entender irei fazer um exemplo na pratica para ver como funciona, e claro usando algumas coisas como sequence e um pequeno cursor para facilitar todo o contexto, passo a passo:

Primeiramente vamos criar um tabela para o nosso exemplo funcionar legal:

  1. CREATE TABLE tab01 (<br />
  2. campo01 number(11) PRIMARY KEY,<br />
  3. campo02 varchar2(100)<br />
  4. );

Vamos criar um sequence para facilitar um pouco mais a nossa vida:

  1. CREATE sequence ctab01;

Ok, aqui vamos comecar popular a nossa tabelinha soh para ter alguma informacao e ficar mais legal a brincadeira:

  1. INSERT INTO tab01 VALUES (ctab01.NEXTVAL,'AAAAAA');

DECLARE
NUMERO NUMBER(11);
BEGIN
FOR NUMERO IN 1..5
LOOP
insert into tab01 select ctab01.nextval,'BBBBBB' from tab01;
COMMIT;
END LOOP;
END;

Bom nesse passo com a tabela ja criada e populada vamos criar uma procedure onde vai utilizar um campo por exemplo da tabela, só usar dando um select simples:

  1. CREATE OR REPLACE procedure proc_01<br />
  2. is<br />
  3. begin<br />
  4. declare<br />
  5. v_aux varchar2(100);<br />
  6. begin<br />
  7. SELECT campo02 INTO v_aux FROM tab01 WHERE ROWNUM = 1;<br />
  8. end;<br />
  9. end;<br />
  10.  

Agora vamos prestar a atenção no status desse objetos(a procedure PROC_01), ela está VALID:
  1. SQL> SELECT object_name,STATUS FROM ALL_OBJECTS WHERE OBJECT_NAME ='PROC_01';

OBJECT_NAME STATUS
------------------------------ -------
PROC_01 VALID
Nessa etapa vamos criar um campo novo na estrutura da tabela:

  1. ALTER TABLE TAB01 ADD CAMPO03 NUMBER(3);

Então observando novamente o status do objeto PROC_01, nota-se que agora o status está INVALID:
  1. SQL> SELECT object_name,STATUS FROM ALL_OBJECTS WHERE OBJECT_NAME ='PROC_01';

OBJECT_NAME STATUS
------------------------------ -------
PROC_01 INVALID

Mas o que não contavamos é q se precisarmos de usar a proc_01 ela vai funcionar mesmo assim com o status INVALID, pois o Oracle compila o objeto antes de executar, claro se por algum motivo nao interfiriu diretamente no objeto inicial, como trocando o tipo da coluna entre outros.

  1. SQL> EXEC PROC_01;

Assim podes olhar em seguida o status do objeto:
  1. SQL> SELECT object_name,STATUS FROM ALL_OBJECTS WHERE OBJECT_NAME ='PROC_01';

OBJECT_NAME STATUS
------------------------------ -------
PROC_01 VALID

Desta forma podemos notar que se fizeres alguma alteração de estrutura do tipo inclusao ou sem alterar o que está dentro destes objetos do tipo proc, view, func, ou outros o Oracle vai garantir que sua aplicação nao vai parar.
Mas recomenda-se que no momento q fores fazer alguma alteração de estrutura, recompile seus objetos relacionados, para também nao ter dor de cabeça mais tarde.