FUNCIONES

  • Una función es un bloque PL/SQL con nombre que devuelve un valor.
  • Una función puede estar almacenada en la B.D., como objeto de la B.D., para repetidas ejecuciones.
  • Una funcion puede ser llamada como parte de una expresion.

SINTAXIS

CREATE [ OR REPLACE ] FUNCTION nombre_de_la_funcion
(argumento 1 , argumento 2, etc)
RETURN tipo_de_dato
IS | AS
bloque PL/SQL;
  • Los bloques PL/SQL se inician con BEGIN o con la declaración de las variables locales y terminan con END o END nombre de función.
  • Deben contener al menos una sentencia RETURN(variable).
  • No pueden hacer referencia a variables host o bind en el bloque PL/SQL

EJEMPLO

CREATE OR REPLACE FUNCTION get_salario
(v_id IN EMPLOYEES.EMPLOYEE_ID%TYPE)
RETURN NUMBER
IS
	v_salario EMPLOYEES.SALARY%TYPE :=0;
  BEGIN 
  	SELECT SALARY	
  	INTO v_salario
  	FROM EMPLOYEES
	WHERE EMPLOYEE_ID  = v_id;
	RETURN (v_salario);	
  END get_salario;
  /	

Como que devuelve un valor hay que ejecutarlo dentro de un procedimiento PL/SQL … vamos a hacer uno cutre para ver qeu efectivamente funciona:

SQL> VARIABLE GS NUMBER
SQL> execute :GS :=get_salario(205);
  PL/SQL procedure successfully completed.
SQL> print GS
        GS
----------
     12000
 SQL> 

VENTAJAS

Ventajas de las Funciones Definidas por el Usuario:

  • Se suman a las ya existentes del lenguaje permitiendo una mayor capacidad.
  • Aumentan la eficiencia, por ejemplo incluyendolas en clausulas WHERE para filtrar previamente los datos.
  • Permiten ejecutar consultas en paralelo.
  • Se pueden llamar desde cualquer parte, como parte de un select, un where o un having, etc.

RESTRICCIONES

  • Tienen que ser funciones almacenadas.
  • Sólo admiten parámetros IN
  • Sólo devuelven tipos de datos simples ( NUMBER, CHAR, DATE, … )
  • No permiten comandos DML (Insert, Update, Delete)

BORRAR UNA FUNCION

DROP FUNCTION nombre_de_la_funcion
 
plsql/6.txt · Última modificación: 2008/05/13 10:00 (editor externo)
 
Excepto donde se indique lo contrario, el contenido de esta wiki se autoriza bajo la siguiente licencia:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki