PDA

Ver la Versión Completa : Ejecucion de funciones


febito
25-06-2004, 15:26:46
Hola, no encuentro la manera de ejecutar una funcion creada por mi en Oracle 9i.

Probe con: "exec generar_id(parametro)" pero no funciono.

Alguien pordria ayudarme. Muchas gracias.

delphi.com.ar
25-06-2004, 15:30:26
Esa sintaxis funcionará desde SqlPlus, no especifícas de donde estas llamando esta función, de todos modos, te recomiendo probar esta sintaxis:
begin
generar_id(parametro);
end;

Saludos!

febito
25-06-2004, 15:42:05
En sql plus no funciona.
Primero quiero encontrar la forma de probar desde sql plus y luego introducirla al codigo. Esta funcion debo llamarla finalmente desde codigo perl.

delphi.com.ar
25-06-2004, 15:46:35
En sql plus no funciona.
Mmmmm... hace mucho que no uso el SqlPlus como para asegurarlo... ¿Pusiste un ";" al final de la línea?

febito
25-06-2004, 15:55:48
Si coloque el ; al finalizar la linea

marto
25-06-2004, 16:09:12
¿Que quiere decir "no funcionó"?

febito
25-06-2004, 16:21:32
emite elmensaje

"comando SQL no terminado correctamente"

marto
25-06-2004, 16:52:33
pues a mi la sintaxis exec "nombre_procedure(parametro1, parametro2);" me funciona bien. Asegúrate del punto y coma final y de que sea un procedure, no una function.

febito
25-06-2004, 18:14:06
Mira yo tengo este sp en la base:

(
NOMTABLA IN VARCHAR2 DEFAULT NULL,
NUEVO_ID OUT number
)
as
begin
SELECT S.SECUENCIA INTO GENERAR_ID_S.NUEVO_ID FROM omwb_login1.SECUEN S WHERE S.TABLENAME = NOMTABLA;
end GENERAR_ID_S;

y lo llamo asi:

exec omwb_login1.generar_id_s('ESTADO');

y me da este error

PLS-00306: número o tipos de argumentos erróneos al llamar a 'GENERAR_ID_S'
ORA-06550: línea 1, columna 7:
PL/SQL: Statement ignored

que estoy haciendo mal?
Gracias por la ayuda

delphi.com.ar
25-06-2004, 18:20:22
¡¡No te puedo creer!!... nos estuviste engañando :)

Esto no te dice nada: PLS-00306: número o tipos de argumentos erróneos al llamar a 'GENERAR_ID_S'

Simplemente el procedure tiene dos parámetros y vos solo estas pasando uno!!

marto
25-06-2004, 18:23:19
1.- Por favor, encierra tu código entre tags [code] para que se pueda leer bien la próxima vez :confused:
2.- No pones el nobre del procedimiento en el ejemplo de código :confused: :confused:
3.- Si se supone que el procedimiento es el que aparece en el error, me parece que el propio mensaje te da la solucion: el procedimiento espera dos parámetros y tú solamente le pasas uno :confused: :confused: :confused:

jachguate
25-06-2004, 18:24:11
la manera de ejecutar una funcion

En plsql, debes asignar el resultado de una función a una variable, o bien usarla en una expresión; no podes ejecutarla como un procedimiento al estilo de pascal.

Por lo tanto, debes hacer algo como:


declare
variable tipodelafuncion;

begin
variable := funcion(parametros);
end;


Eso debiera funcionar tanto en pl/sql como en un query cualquiera desde el cliente.

Hasta luego.

;)

febito
25-06-2004, 18:25:13
no es asi yo habia creado una funcion
y lo transforme a un sp par seguir el consejo que me dieron
pero en realidad lo que necesito es una funcion no un sp.

febito
25-06-2004, 18:41:22
gracias jachguate

ramiretor
15-07-2004, 18:31:41
Hola a todos:
Para ejecutar una funcion en PLSQL si no mal recuerdo existe la expresión:

select "NombreFuncion(Parametro)" from dual;

Ahora bien, para llamar a la función desde el SP necesitarás hacer lo que te recomienda jachguate de asignarle el valor de la función a una variable.

Espero te sirva

Saludos
:cool: