Powered By Blogger

terça-feira, 27 de julho de 2010

Utilizando ADODB do PHP para inserir registros em campos do tipo CLOB no Oracle

Quando precisamos registrar em uma tabela do Oracle um campo que possua mais de 4000 caractéres, temos como opção o tipo CLOB, que é um dos "equivalentes" ao tipo TEXT do MySQL por exemplo. A única coisa que deve ser observada para utilizar esse tipo de formato de dado, é que o procedimento de inserir o registro na tabela é feito em duas etapas, sendo que na primeira etapa é realizado o insert com um valor nulo para o campo CLOB, e na segunda etapa é realizado o update do mesmo registro que acabou de ser inserido, só que desta vez deve ser passado o valor do campo CLOB.

Abaixo segue um exemplo utilizando os métodos Execute e UpdateClob da classe AdoDB para PHP.

1) DDL de criação da tabela que contém um campo CLOB:

CREATE TABLE XML_SERASA
(
"CNPJ" VARCHAR2(30 BYTE),
"DATA_SERASA" NUMBER(8,0),
"XML" CLOB
) ;

2) Código que implementa a inserção de um registro na tabela XML_SERASA.

$this->db->StartTrans();
$this->db->Execute("insert into XML_SERASA ( CNPJ, DATA_SERASA, XML ) values ( '$requisitado', '$data_cons', null)");
$sucesso = $this->db->UpdateClob('XML_SERASA', 'XML', $xml, "CNPJ = '$requisitado' AND DATA_SERASA = '$data_cons'");
$this->db->CompleteTrans();

quinta-feira, 1 de julho de 2010

Configurar o PHP para acessar o Oracle em servidor remoto

Habilitar o PHP para acessar o banco de dados Oracle em um servidor remoto não é algo complicado, porém não é tão simples como habilitar outras extensões como por exemplo mysql e postgresql. Isso porque além de editar o arquivo php.ini para ficar com a extensão oci8 (extensão que permite acesso ao Oracle), é necessário instalar um software client da Oracle, o chamado Oracle Instant Client. Outro detalhe é que para a versão 11g do Oracle, é recomendado habilitar a extensão oci8_11g ao invés da oci8.

No site da Oracle é possível garimpar algumas informações técnicas sobre o assunto.

Leitura recomendada:
http://wiki.oracle.com/page/PHP+Oracle+FAQ
http://www.oracle.com/technetwork/articles/technote-php-instant-084410.html
http://www.oracle.com/technology/pub/notes/technote_php_instant.html