Mais uma dica de C com Oracle no Linux....

Coloque aqui tutoriais (por enquanto, sobre qualquer assunto relacionado a Oracle) e apostilas.
Responder
kim_kaphwan
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Sex, 04 Jun 2004 8:54 am
Localização: sp

É possível criar bibliotecas de funções em C e utiliza-las dentro do Oracle. O procedimento é bem simples. No exemplo, a biblioteca tem somente uma função que converte uma string maiúscula em minúscula:

lib.c:

Selecionar tudo

#include <stdlib.h>
#include <string.h>
                                                                                
char *converte( char *text ) {
          int i;
    for (i=0; text[i]!='\0'; i++) {
           text[i]=tolower(text[i]);
    }
    return text;
}
Para compilar, utilizamos o gcc:

Selecionar tudo

gcc -c lib.c
O gcc irá gerar o objeto lib.o. Depois é só criarmos a .so com o comando:

Selecionar tudo

make -f $ORACLE_HOME/rdbms/demo/demo_rdbms.mk extproc_callback \
          SHARED_LIBNAME=lib.so \
            OBJS=lib.o
Teremos então uma lib do linux chamada lib.so. Precisamos move-la para um caminho aonde o Oracle a encontre, por exemplo $ORACLE_HOME/lib/ ou $ORACLE_HOME/bin/

A biblioteca está pronta, agora só precisamos mostrar ao Oracle como encontra-la. No sqlplus criamos a bilbioteca assim:

Selecionar tudo

sql> CREATE OR REPLACE LIBRARY lib AS '/oracle/9.2.0/lib/lib.so' 
sql> /
Substitua o caminho /oracle/9.2.0/lib/ para o caminho completo daonde você colocou a sua lib. Para criarmos uma Function para acessar as funções de nossa lib, utilizamos o seguinte sql:

Selecionar tudo

      
sql> CREATE OR REPLACE FUNCTION "CONVERTE" (cstr VARCHAR2)
2  return varchar2 as external
3  library lib
4  name "converte"
5  language c
6  parameters  (cstr string);
O nome CONVERTE é o nome da função. No caso declaramos a como uma função que recebe uma VARCHAR2 convertida em string c (cstr) e retorna um VARCHAR2. Utilizamos a bilbioteca criada anteriormente lib e, através do paramêtro name "converte", definimos que queremos utilizar a função converte dessa biblioteca.
O paramêtro language defini a linguagem na qual essa função foi escrita e o paramêtro parameters indica que tipo de dado o oracle deve mandar para ela, no caso uma string c (cstr).

Para utilizarmos nossa nova função, podemos fazer um teste simples dentro do sqlplus:
SQL sem a função:

Selecionar tudo

SQL> select status from v$session where status='ACTIVE';

STATUS
--------
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE

11 rows selected.

SQL com a função: 

SQL> select converte(status) from v$session where status='ACTIVE';

CONVERTE(STATUS)

active
active
active
active
active
active
active
active
active
active
active

11 rows selected.
bom.. é isso ai.. :D
Avatar do usuário
adrianoturbo
Moderador
Moderador
Mensagens: 393
Registrado em: Qui, 20 Mar 2008 4:09 pm
Localização: Brasília

Brother, você tem a biblioteca para conectar o banco ao C ?
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante