lib.c:
#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;
}
gcc -c lib.c
make -f $ORACLE_HOME/rdbms/demo/demo_rdbms.mk extproc_callback \
SHARED_LIBNAME=lib.so \
OBJS=lib.o
A biblioteca está pronta, agora só precisamos mostrar ao Oracle como encontra-la. No sqlplus criamos a bilbioteca assim:
sql> CREATE OR REPLACE LIBRARY lib AS '/oracle/9.2.0/lib/lib.so'
sql> /
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 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:
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.