OracleXE en ubuntu 7.10 desde repositorios

Para comenzar tendremos que añadir el nuevo repositorio a nuestro archivo “sources.list”:

  • sudo gedit /etc/apt/sources.list
Ahora añadimos:
Ahora actualizamos los repositorios e instalamos:
  • sudo aptitude update
  • sudo aptitude install oracle-xe-universal oracle-xe-client
Una vez instalado configuramos Oracle:
  • sudo /etc/init.d/oracle-xe configure
Si no queremos que nuestro pc cargue al inicio de sesión oracle deberemos cargar las variables de entorno de Oracle.
Para iniciar una bd tendremos que asignar el grupo bd a los usuarios que queramos -el nuestro y oracle-
En caso de que no queramos que nuestro sistema arranque al inicio de sesión oracle tendremos que hacer lo siguiente:
  • sudo sh /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh

Ahora en Aplicaciones deberíamos tener Oracle

Tratar cadenas de texto con una Function en Oracle

Función que he creado en Oracle y a la qual pasandole una cadena de texto: “nombre1,nombre2,nombre3”. Nos los devolveria separados y podriamos hacer el insert de forma individual en la base de datos por ejemplo.

El código de la función es este:

function get_token(
the_list in varchar2,
the_index in number,
delim in varchar2 := ‘,’
)
return varchar2
is
start_pos number;
end_pos number;
begin
if the_index = 1 then
start_pos := 1;
else
start_pos := instr(the_list,delim,1,the_index – 1);
if start_pos = 0 then
return null;
else
start_pos := start_pos + length(delim);
end if;
end if;
end_pos := instr(the_list,delim,start_pos,1);
if end_pos = 0 then
return substr(the_list,start_pos);
else
return substr(the_list,start_pos,end_pos – start_pos);
end if;
end get_token;

En la variable delim le decimos si van a estar separadas por comas o porque delimitador. Un ejemplo simple de su uso es este:

v_contador :=1;

while GET_TOKEN(i_motivonovisita,v_contador,v_separador) is not null

LOOP

insert into tb_motivosnovisita (codvalor,foreignkeyfc,descripcion) values
(GET_TOKEN(i_codmotivonovisita,v_contador,v_separador),i_primarykey,
GET_TOKEN(i_motivonovisita,v_contador,v_separador));

v_contador := v_contador+ 1;

END LOOP;

Esto serviria para hacer un insert en una tabla con los registros que nos vendrian separados por “,”

Espero que sirva de ayuda

HowTo: Trabajar con ficheros desde Oracle

Para el tratamiento de ficheros de texto desde un procedimiento de Oracle, hay que usar las funciones que proporciona el package UTL_FILE.

Más info sobre este package puede obtenerse de:
http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96612/u_file.htm

La relación exacta de funciones y sus parámetros puede obtenerse de:
http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96612/u_file2.htm#1000703

Para trabajar con ficheros, previamente se debe haber creado un “directorio”. Un directorio es un objeto lógico que Oracle utiliza como intermediario entre el PL/SQL y el directorio físico.

Sólo los usuarios de sistema pueden crear directorios y conceder derechos al resto de los mortales. Por lo tanto, hay que solicitar a Centro de Información, Administrador si es el caso o sino crearlo con un usuario de sistema, la creación de dicho directorio, con sentencias como estas:

CREATE DIRECTORY DGQ_OFICINES AS ‘\\asf2\public\mi_directorio’;
GRANT READ ON DIRECTORY DGQ_OFICINES TO SIRA;
GRANT WRITE ON DIRECTORY DGQ_OFICINES TO SIRA;
(por supuesto, el usuario Oracle ha de tener acceso a dicho recurso físico, o éste debe tener acceso público)

Después, hay que usar DGQ_OFICINES, en las llamadas de las funciones (por ejemplo, en el FOPEN). Se ha de poner en mayúsculas.

Ejemplo de código que crea un fichero y escribe una línea:

procedure file_test as
ft utl_file.file_type;
begin
ft := utl_file.fopen(‘DGQ_OFICINES’,’test.txt’,’w’,500);
utl_file.put_line(ft,’hola’,false);
utl_file.fclose(ft);
end;

En este caso, este código abre un fichero (lo crea si no existe y lo machaca si existe).
FT es el handle al fichero. Se asigna con FOPEN y se usa en posteriores operaciones.

FOPEN recibe el nombre del directorio, el nombre del fichero, el modo (read, write o append), y el tamaño máximo de linea a escribir o leer del fichero.

PUT_LINE escribe un texto, añadiendo un separador de línea (hay otra función que no lo añade). Finalmente, el fichero se cierra con FCLOSE.