 |
|
 |
Funciones en PL/SQL
Una función es un subprograma que devuelve un valor.
La sintaxis para construir funciones es la siguiente:
CREATE [OR REPLACE] FUNCTION <fn_name>[(<param1> IN <type>, <param2> IN <type>, ...)] RETURN <return_type> IS result <return_type>; BEGIN return(result); [EXCEPTION] -- Sentencias control de excepcion END [<fn_name>];
|
El uso de OR REPLACE permite sobreescribir una función existente. Si se omite, y la función existe, se producirá, un error.
La sintaxis de los parámetros es la misma que en los procedimientos almacenado, exceptuando que solo pueden ser de entrada.
Ejemplo:
CREATE OR REPLACE FUNCTION fn_Obtener_Precio(p_producto VARCHAR2) RETURN NUMBER IS result NUMBER; BEGIN SELECT PRECIO INTO result FROM PRECIOS_PRODUCTOS WHERE CO_PRODUCTO = p_producto; return(result); EXCEPTION WHEN NO_DATA_FOUND THEN return 0; END ;
|
Si el sistema nos indica que el la función se ha creado con errores de compilación podemos ver estos errores de compilacion con la orden SHOW ERRORS en SQL *Plus.
Una vez creada y compilada la función podemos ejecutarla de la siguiente forma:
DECLARE Valor NUMBER; BEGIN Valor := fn_Obtener_Precio('000100');
END;
|
Las funciones pueden utilizarse en sentencias SQL de manipulación de datos (SELECT, UPDATE, INSERT y DELETE):
SELECT CO_PRODUCTO, DESCRIPCION, fn_Obtener_Precio(CO_PRODUCTO) FROM PRODUCTOS;
|
|
| |
 |
Culo
por
Pedo
Respuesta recibida el [30/06/2008 04:01:05]
|
 |
Me parece un sitio muy interezante...quedan muy claros los temas.
|
| |
 |
ESTUPIDO!!!
por
CHINAIS
Respuesta recibida el [08/07/2008 02:42:19]
|
 |
ESA PERSONA ES TAN IGNORANTE AL PONERSE UN NICK COMO ESE...AMS
|
| |
 |
follero
por
cachero
Respuesta recibida el [10/07/2008 04:27:21]
|
 |
EL tutorial esta de P.M
|
| |
 |
GATO
por
LIEBRE
Respuesta recibida el [27/08/2008 12:55:48]
|
 |
ESte tutorial esta de punta madre de chinais
|
| |
 |
ayuda
por
Leonardo
Respuesta recibida el [16/09/2008 01:06:09]
|
 |
muy interesante pero tengo una duda como hago paraque la funcion me devuleva dos parametros???????
|
| |
 |
respondinedole al bello leonar...
por
Marix
Respuesta recibida el [16/09/2008 07:04:14]
|
 |
respondinedole al bello leonardo... una funcion solo retorna un valorr.. papacito
|
| |
 |
espuesta a leonardo
por
alfae2
Respuesta recibida el [01/10/2008 05:24:16]
|
 |
Tendrás que hacer un procedimiento con parámetros OUT
|
| |
 |
Para que una funcion pueda dev...
por
devjoker
Respuesta recibida el [01/10/2008 07:52:18]
|
 |
Para que una funcion pueda devolver mas de un valor, create un tipo propio - por ejemplo "persona", con nombre, apellidos y edad - y haz que la funcion devuelva "persona"
|
| |
 |
funcion q simula el retorno de dos valores
por
yo de nuevo
Respuesta recibida el [04/11/2008 10:55:49]
|
 |
/* Formatted on 2008/11/04 14:48 (Formatter Plus v4.8.5) */ CREATE OR REPLACE FUNCTION fnc_ejemplo ( param1 IN VARCHAR2, param_out1 OUT VARCHAR2 ) RETURN NUMBER IS RESULT NUMBER; BEGIN SELECT valor INTO param_out1 FROM tabla;
result := 1; RETURN RESULT; exception when ....then END fnc_ejemplo;
/*Luego para usarlo*/ DECLARE valor NUMBER; valor_out VARCHAR2 (50); BEGIN valor := fnc_ejemplo ('PARAM', valor_out); END;
/* Explicacion: la funcion fnc_ejemplo recibe dos parametros uno de tipo OUT y uno de tipo IN. Luego esa variable se setea en el cuerpo de la funcion asignandole un valor. Como sabemos la funcion devuelve un valor en este caso es "result" que es un NUMBER. ahora bien cuando llamamos a la funcion al asignarle el parametro valor_out se carga el valor en esta variable y luego esta disponible para el resto del bloque*/
|
| |
 |
Llamar desde otra instancia
por
Pablo Condoleo
Respuesta recibida el [23/12/2008 06:00:44]
|
 |
Y si la funcion se encuentra en otra instancia?? Como puedo acceder a la misma? Necesito hacer un query 'SELECT campo1,funcion_de_otra_instancia(campo2) from tabla,...'
|
| |
 |
Llamar desde otra instancia
por
Luis
Respuesta recibida el [21/01/2009 11:47:19]
|
 |
que pasa si haces una referencia utilizando un subquery o llamandola haciendo referencia desde la tabla por ejemplo 'Select *from tabla where campo1 in (select funcion_de_otra_instancia(campo2) from tabla2)
|
| |
 |
SOLO TENES K PODER ACCEDER A L...
por
UNKNOWN
Respuesta recibida el [06/02/2009 10:31:38]
|
 |
SOLO TENES K PODER ACCEDER A LA INSTANCIA DESDE LA CUAL QUERES EJECUTARLA: EJEM INSTANCIA1.NOMBRE_FUNCION ...
|
| |
 |
Retornar variable tipo cursor
por
Glenn
Respuesta recibida el [09/02/2009 07:50:23]
|
 |
Favor alguien me puede decir si las funciones pueden retornar variables de tipo cursor en pl/sql y si es posible escribir la sintaxis, de antemano muchas gracias
|
| |
 |
Que les pasa pelaos
por
Juventud Comunista
Respuesta recibida el [06/05/2009 05:52:30]
|
 |
Que les pasa pelados que en todo comentario se creen superiores a los demas..
|
| |
 |
Retornar variable tipo cursor
por
clau
Respuesta recibida el [10/06/2009 06:32:04]
|
 |
Para Glen, Si se puede, envio algo muy secillo espero que te sirva.
|
| |
 |
funcion que devueva horas trab...
por
Anónimo
Respuesta recibida el [21/06/2009 02:46:32]
|
 |
funcion que devueva horas trabajadas en un mes
|
| |
 |
funcion que devueva horas trab...
por
Anónimo
Respuesta recibida el [21/06/2009 02:47:15]
|
 |
funcion que devueva horas trabajadas en un mes de un mecanico
|
| |
 |
?
por
?
Respuesta recibida el [26/06/2009 06:09:20]
|
 |
oe de que hablan ah jajaja
|
| |
 |
consulta
por
dudoso jejeje
Respuesta recibida el [27/06/2009 10:16:41]
|
 |
y que pasa si no solo quiero un valor de retorno, sino quiero un conjunto de valores por ejemplo un type con 2 atributos ?... como haria
|
| |
 |
consulta
por
dudoso jejeje
Respuesta recibida el [27/06/2009 10:18:09]
|
 |
y que pasa si no solo quiero un valor de retorno, sino quiero un conjunto de valores por ejemplo un type con 2 atributos ?... como haria
|
| |
 |
respuesta
por
dudoso jejeje
Respuesta recibida el [27/06/2009 10:19:52]
|
 |
por ahi alguien dijo q una funcion solo retorna un valor, pues eso no es cierto se puede retornar mas valores, que investigue mas lo mismo hare yo y el q encuntra la solucion que lo coloque en el foro bye
|
| |
 |
Utiliza un procedimiento.
por
drlang
Respuesta recibida el [23/08/2009 03:17:27]
|
 |
Tambien yo se que una funcion solo regresa un valor; si quieres regresar mas valores utiliza un procedimiento con parametros de salida.
|
| |
 |
puede devolver una fila?
por
Silver
Respuesta recibida el [27/10/2009 09:48:34]
|
 |
Y si en la funcion quisiera que me devuelva un valor de tipo %rowtype? es posible?
|
| |
 |
y que pasa con un type??
por
yo
Respuesta recibida el [26/11/2009 09:06:32]
|
 |
hola. quiero devolver desde una función una colección de registros ¿como lo hago?, y no quiero un no se puede por respuesta, si no algo mas complementado.
|
| |
 |
Almacena
por
PCMS
Respuesta recibida el [26/11/2009 05:12:10]
|
 |
buenasa esta pagina pero tengo una duda donde se guarda una vez creado el procedimientos y con que extencion de archivo
|
| |
 |
Retornar más de un valor
por
Eduart Luis
Respuesta recibida el [15/12/2009 09:36:52]
|
 |
Buenas, si quieres retornar más de un valor en una función, debes crear un tipo registro. ahora si quieres retornar un conjunto de registros en una función, debes crear una tabla o un vector. Las funciones solo pueden retornar una variable, la clave está en el tipo de variable, una variable puede contener varios valores.
|
| |
 |
Sintaxis correcta de funciones
por
Jorge
Respuesta recibida el [31/01/2010 10:22:51]
|
 |
Si bien Oracle tolera las funciones con mas de un return, conceptualmente es un error. Una función debe tener solo un punto de retorno y la sentencia return debe ser la última que se ejecute. Por ejemplo:
Create Function Prueba (a number, b number ) return number is Result number := 0; Begin Begin Result := a + b; Exception When others then Result := 0; Return Result; End Prueba;
Si bién el ejemplo es muy simple y es muy dificil que se produzca un raise, lo que trato de mostrar aqui es la manera correcta de codificar una función con un solo punto de retorno. Para hacerla un poco mas completa se le podría agregar una variable booleana o una variable de texto out que permita determinar en caso de error cual fue y donde se produjo.
|
| |
 |
Fe de erratas
por
Jorge
Respuesta recibida el [31/01/2010 10:30:14]
|
 |
Bueno, antes que me critiquen, falto el END del bloque anidado, aqui va la función corregida:
Create Function Prueba (a number, b number, txterr out varchar2 ) return number is Result number := 0; Begin Begin Result := a + b; Exception When others then txterr := sqlerrm; Result := 0; End; Return Result; End Prueba;
|
| |
 |
muy bien
por
mi pene en tu boca
Respuesta recibida el [07/02/2010 03:29:59]
|
 |
Muy bueno si señor
|
| |
 |
TABLA
por
NICTE
Respuesta recibida el [06/03/2010 04:59:57]
|
 |
¡Como hago que una funcion me devuelva una tabla?
|
| Añadir comentario ... |
Para preguntar utiliza los foros
|
|

|
Funciones en PL/SQL |
|
Autor:
Pedro Herrarte Sánchez
|
|
Visitas:
98809 |
Fecha de publicación:
10/07/2006 |
Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación.
Posee mas de diez años de experiencia trabajando para las principales empresas de España.
Es especialista en tecnologías .NET, entornos Web, bases de datos (SQL Server y ORACLE) e integración de sistemas.
Es experto en desarrollo (C#, ASP.NET, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE).
Es fundador, diseñador y programador de www.devjoker.com. |
|
|
Visitas:
111
|
Comentarios:
3
|
Archivo:
Articulos
|
Visitas:
811
|
Comentarios:
2
|
Archivo:
Articulos
|
Visitas:
767
|
Comentarios:
3
|
Archivo:
Articulos
|
Visitas:
674
|
Comentarios:
2
|
Archivo:
Articulos
|
Visitas:
3183
|
Comentarios:
2
|
Archivo:
Articulos
|
Visitas:
14571
|
Comentarios:
7
|
Archivo:
Articulos
|
Visitas:
1499
|
Comentarios:
3
|
Archivo:
Articulos
|
|
Visitas:
697
|
Comentarios:
2
|
Archivo:
Articulos
|
|
Visitas:
369
|
Comentarios:
0
|
Archivo:
Articulos
|
Visitas:
2034
|
Comentarios:
2
|
Archivo:
Articulos
|
|
|
 |
|
 |