Dudas sobre funciones y procedimientos cuando trabajo con Oracle

Acudo a vosotros en busca de auxilio. Llevo poco tiempo trabajando con oracle y se me está haciendo un poco cuesta arriba. El caso es el siguiente, yo tengo una serie de direcciones, por ejemplo, 'Pº de la Habana, 45 3ºizquierda', de donde, pasándole esta información debo hallar lo siguiente:
Dirección: de la Habana
Nº: 45
Resto de dirección: 3ºizquierda
La parte de quitar Pº ya la tengo funcionando pero claro, ¿paso un parámetro y debo recibir 3. Cómo lo hago? ¿Con una función? ¿Un procedimiento? Si es un procedimiento cómo se le llamaría después y veo los datos...

1 respuesta

Respuesta
1
Te conteste ayer, pero no sé que paso al enviar la respuesta.
Te decía que no veo inconveniente en utilizar función siempre y cuando utilices la vble de vuelta como conjunción de varias. Por ejemplo podrías separar los tres parámetros que quieres devolver en uno separados por #, así en tu ejemplo la función devolvería "de la Habana#45#3ºizquierda". También puede utilizar un procedimiento que devueva tres vbles con los tres parámetros y quizás se más fácil, solo tendrías que declararlas como out.
Me queda la duda que todas las direcciones tengan el mismo formato y que empiecen por Pº o por C o por Avda y le siga el resto de cosas, pero supongo que con eso habrás contado.
Si tienes más dudas, hadmelas saber
Buenos días,
en primer lugar muchas gracias por tu atención. Precisamente lo que me comentabas fue lo que se me ocurrió y lo que finalmente hice, pero de cara a más adelante, a otros casos, me gustaría saber hacerlo a través de un procedimiento. Se que se hace declarando variables out, de hecho fue lo primero que pensé. La problemática que es que el parámetro de entrada, muy bien, pero el de salida no se como "invocarlo", qué es lo que debo de poner (cuando ejecuto el procedimiento), porque se supone que es lo que me tiene que devolver el propio procedimiento. Ahí es donde me lié un poco. Y creo que también en una función se pueden declarar varias variables out, pero el tema es el mismo, cuando llamo a la función, qué hago con las variables de salida ¿?
Gracias.
En funciones no puedes utilizar vbles de salida, solo tienes la que devuelves en el return.
En los procedimientos puedes utilizar:
IN - Para vbles de entrada
IN OUT - Para vbles de entrada/salida
OUT - Para vbles de salida
Ejemplo:
CREATE OR REPLACE PROCEDURE prueba
Fecha IN date,
numero IN OUT number,
literal IN OUT varchar2) is
Perdona, creo que no me he explicado bien. A la hora de crear el procedimiento, yo declaro las variables de entra y salida según sea. Hasta ahí bien. ¿Pero a la hora de ejecutar el procedimiento? ¿Sería algo así? exec procedimiento (v_entrada, v_salida1? , v_salida2?)?
Si así sería, las mandas para luego utilizarlas en el proceso donde estas llamando.
Perdona, no te comenté que era sobre oracle. A ver, veo que soy un poco cabezona porque no me entero. Tengo 3 parámetros 1 de entrada y dos de salida. Supongo que los 3 se declaran en el declare y en el begin es donde se ejecuta el procedimiento. El primero, de entrada, cogería el valor de la tabla, es decir, yo a través de un cursor voy recorriendo la tabla y voy dando un valor a esa variable, ¿pero las otras dos qué valores les pongo? ¿También las tengo que declarar?
Declare
Cursor uno is...
v_entrada varchar2(10);
v_salida1varchar2(10);
v_salida2 varchar2(10);
begin
open cursor;
    fech...
    while... loop
       exec procedimiento (v_entrada (valor recogido de la tabla), v_salida1, v_salida2)
       fech...
    end loop;
close cursor;
end;
Si a las variables de salida les ponía :v_salida1 :v_salida2 me pedía valores, que no entiendo por qué si esos valores son los que tiene que devolver el procedimiento no dárselos yo
Es que no tienes que poner dos puntos (:), lo tienes que hacer como lo tienes en el ejemplo sin los puntos.
A las otras dos vbles no tienes porque ponerles ningún valor sin son OUT, si son IN OUT debes darle el valor que después utilices dentro del proc.
Si tienes más dudas, no te corte y dímelo.
Buenos días. He contestado ya dos veces pero... no quiere enviarlo porque dice que hay demasiadas mayúsculas. El caso es que lo probé y ya si me salee! Muchas gracias. Ahora quería preguntarte, porque yo esos datos los debo visualizar en una select, entonces, la manera que tengo de visualizar las salidas son a través del output, estoy pensando... ¿en la select directamente visualizo las variables y punto no? ¿No hace falta que lo que visualiza el output lo guarde en ningún sitio porque lo que hace es visualizar el propio contenido de la variable no?
No te entiendo muy bien. Visualizar en una select? No entiendo que quieres hacer.
Hola,
perdona, a ver si me explico. Por ejemplo yo tengo que visualizar en una select diferentes datos, nº socio, nombre, dirección y teléfono. Nº socio, nombre y teléfono lo saco directamente de la tabla, pero la dirección debe estar previamente depurada por el procedimiento, de tal manera que al hacer la selec, la dirección esté limpia. La dirección depuerada en el procedimiento es una variable entonces o se hace a través de la select (que no se si se podrá)
select socio, nombre, v_direccion, telefono from dual
o para hacerlo así tengo que hacer algún paso previo como (se me ocurre así):
llamada a procedimiento
v_direccion:= dbms_output.put_line (v_direccion_out);
y luego
select socio, nombre, v_direccion, telefono from dual
no se si me he explicado, visualizar lo que me devuelve el procedimiento junto a los demás campos. no se si funciona como una función que sería así:
select socio, nombre, fucion(direccion), telefono from dual
Un saludo
Ahora si te entiendo. Pues es posible que lo puedas hacer desde la select pero todo depende de lo que le cueste a Oracle devolverte los resultados y en todo caso, yo cambiaría la función para que me devolviera lo que quiero en cada momento. Quiero decir:
La función me devolvería la calle, el numero o lo que sea en función de un parámetros, por ejemplo:
Funcion direccion( direccion, que_devuelvo) is
Si que_devuelvo es 1 devuelvo la calle
Si que_devuelvo es 2 devuelvo el numero
Si que_devuelvo es 3 devuelvo el portal
y ahora la select la construyo asi:
select nombre, ...., direccion(direccion,1), direccion(direccion,2), direccion(direccion,3)
From loquesea
De esta forma no tendría que hacer ningún procedimiento para disecccionar el parámetro compuesto por varios valores como hablambamos al principio.
No se si te puede servir.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas