InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
Tutorial PL/SQL
Introducción a PLSQL
Programación con PL/SQL
Fundamentos de PL/SQL
Tipos de datos en PL/SQL
Operadores en PL/SQL
Estructuras de control en PL/SQL
Bloques PL/SQL
Cursores en PL/SQL
Cursores Implicitos en PL/SQL
Cursores Explicitos en PL/SQL
Cursores de actualización en PL/SQL
Excepciones en PL/SQL
Excepciones personalizadas en PL/SQL
Propagacion de excepciones en PL/SQL
Subprogramas en PL/SQL
Procedimientos almacenados en PL/SQL
Funciones en PL/SQL
Triggers en PL/SQL
Subprogramas en bloques anónimos
Paquetes en PL/SQL
Registros PL/SQL
Tablas PL/SQL
Tipo VARRAY
BULK COLLECT
Transacciones con PL/SQL
Transacciones autónomas
SQL Dinamico
Funciones integradas de PL/SQL
Secuencias
PL/SQL y Java
También puedes ver ...
Excepciones personalizadas en PL/SQL
Como conectar a ORACLE con Java
Recuperar datos BLOB de ORACLE
Trabajar con datos de tipo BLOB en ORACLE
Secuencias
PL/SQL y Java
SQL Dinamico
Transacciones autónomas
Funciones integradas de PL/SQL
Transacciones con PL/SQL


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;

 


Inicio | Tutorial PL/SQL Procedimientos almacenados en PL/SQLTutorial PL/SQLTriggers en PL/SQL Versión para imprimir Foros de consulta

 
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
Autor:

Título:


Para preguntar utiliza los foros.



Inicio | Tutorial PL/SQL Procedimientos almacenados en PL/SQLTutorial PL/SQLTriggers en PL/SQL Versión para imprimir

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
02/02/2010 iPad vs Telesketch
Visitas: 811 | Comentarios: 2 | Archivo: Articulos
Categorias: Humor
Visitas: 767 | Comentarios: 3 | Archivo: Articulos
Visitas: 3183 | Comentarios: 2 | Archivo: Articulos
Categorias: C#
Visitas: 14571 | Comentarios: 7 | Archivo: Articulos
Categorias: C#|Seguridad
Visitas: 1499 | Comentarios: 3 | Archivo: Articulos
Visitas: 697 | Comentarios: 2 | Archivo: Articulos
Visitas: 369 | Comentarios: 0 | Archivo: Articulos
Visitas: 2034 | Comentarios: 2 | Archivo: Articulos
Categorias: C#

Útimos temas recibidos en los foros ...
certificado de pensiones del bbva horizonte por danger ... [Actualidad] 127 12/01/2010
certificacion cesantias porvenir por martha perez ... [Actualidad] 6 04/03/2010
Solicitud certificado de afiliaciones a pensiones y cesantias proteccion por hz ... [Actualidad] 60 10/02/2010
cerificado fondo horizonte de pensiones y cesantias por carlos fideligno torres herrera ... [Actualidad] 148 18/01/2010
certificado de afiliacion por EDDY ... [Actualidad] 0 14/03/2010
Cursores por nopodes ... [ORACLE] 0 14/03/2010
peticion urgente mi nombre es juan pablo osorio cardona cc 71115218 por juancho ... [Actualidad] 0 14/03/2010
peticion por juancho ... [Actualidad] 0 14/03/2010
estrato de pencion por carlos antonio mateus gomez ... [Actualidad] 0 14/03/2010
quiero aprender c# por alcapego ... [C#] 4 16/02/2008
certificado pensiones horizonte por angela patricia rodriguez ... [Actualidad] 140 26/01/2010
certificado de penciones y cesantias por fredy ... [Actualidad] 2 29/01/2010

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
16/08/2007 Borrar datos en Transact SQL    forma parte de...Tutorial de Transact SQL
22/10/2005 Insertar datos. INSERT    forma parte de...Tutorial SQL
01/08/2007 Actualizar datos en Transact SQL    forma parte de...Tutorial de Transact SQL
12/01/2006 Introducción a PLSQL    forma parte de...Tutorial PL/SQL
27/10/2006 Eventos    forma parte de...Tutorial C#
29/12/2007 Cómo colocar el foco (cursor) en un control en ASP.net
21/07/2007 Insertar datos en Transact SQL    forma parte de...Tutorial de Transact SQL
29/05/2006 J2EE Y .NET: LA RIVALIDAD PERMANENTE
22/02/2008 Cómo consumir un Servicio WCF en vez de un Web Service
06/04/2009 Como modificar el web.config sin reiniciar la aplicacion ASP.NET

 

Encuesta
¿A que perfil te adaptas mejor?




[Ver] [Votar]