Buscar..
Sintaxis
CREAR [O REEMPLAZAR] PAQUETE nombre_paquete
[AUTHID {CURRENT_USER | DEFINER}]
{IS | COMO}
[PRAGMA SERIALLY_REUSABLE;]
[collection_type_definition ...]
[record_type_definition ...]
[subtipo_definición ...]
[colección_declaración ...]
[constante_declaración ...]
[excepción_declaración ...]
[object_declaration ...]
[record_declaration ...]
[variable_declaración ...]
[cursor_spec ...]
[function_spec ...]
[procedure_spec ...]
[call_spec ...]
[PRAGMA RESTRICT_REFERENCES (aserciones) ...]
END [nombre_paquete];
CREAR O REEMPLAZAR EL PAQUETE PackageName IS
FUNCIÓN FunctionName (parámetro 1 EN VARCHAR2, paramter2 EN NÚMERO) RETURN VARCHAR2;
END PackageName;
CREAR [O REEMPLAZAR] PACKAGE BODY package_name
{IS | COMO}
[PRAGMA SERIALLY_REUSABLE;]
[collection_type_definition ...]
[record_type_definition ...]
[subtipo_definición ...]
[colección_declaración ...]
[constante_declaración ...]
[excepción_declaración ...]
[object_declaration ...]
[record_declaration ...]
[variable_declaración ...]
[cursor_body ...]
[function_spec ...]
[procedure_spec ...]
[call_spec ...]
END [nombre_paquete];
CREAR O REEMPLAZAR EL CUERPO DEL PAQUETE PackageName IS
FUNCIÓN FunctionName (parámetro 1 EN VARCHAR2, paramter2 EN NÚMERO) RETURN VARCHAR2 IS
declaraciones
EMPEZAR
declaraciones para ejecutar
VOLVER varchar2 variable
END FunctionName;
END PackageName;
Uso del paquete
Los paquetes en PLSQL son una colección de procedimientos, funciones, variables, excepciones, constantes y estructuras de datos. En general, los recursos de un paquete están relacionados entre sí y realizan tareas similares.
Por qué usar paquetes
- Modularidad
- Mejor rendimiento / funcionalidad
Partes de un paquete
Especificación - A veces se llama un encabezado de paquete. Contiene declaraciones de variables y tipos y las firmas de las funciones y procedimientos que se encuentran en el paquete, que son públicos para ser llamado desde el exterior del paquete.
Cuerpo del paquete: contiene el código y las declaraciones privadas .
La especificación del paquete debe compilarse antes que el cuerpo del paquete, de lo contrario, la compilación del cuerpo del paquete informará un error.
Sobrecarga
Las funciones y procedimientos en los paquetes pueden estar sobrecargados. El siguiente paquete de PRUEBA tiene dos procedimientos llamados número de impresión , que se comportan de manera diferente según los parámetros con los que se llama.
create or replace package TEST is
procedure print_number(p_number in integer);
procedure print_number(p_number in varchar2);
end TEST;
/
create or replace package body TEST is
procedure print_number(p_number in integer) is
begin
dbms_output.put_line('Digit: ' || p_number);
end;
procedure print_number(p_number in varchar2) is
begin
dbms_output.put_line('String: ' || p_number);
end;
end TEST;
/
Llamamos a ambos procedimientos. El primero con parámetro entero, el segundo con varchar2.
set serveroutput on;
-- call the first procedure
exec test.print_number(3);
-- call the second procedure
exec test.print_number('three');
La salida del script anterior es:
SQL>
Digit: 3
PL/SQL procedure successfully completed
String: three
PL/SQL procedure successfully completed
Restricciones en la sobrecarga
Solo se pueden sobrecargar los subprogramas locales o empaquetados, o los métodos de tipo. Por lo tanto, no puede sobrecargar subprogramas independientes. Además, no puede sobrecargar dos subprogramas si sus parámetros formales difieren solo en el modo de nombre o parámetro
Definir un encabezado de paquete y un cuerpo con una función.
En este ejemplo, definimos un encabezado de paquete y un cuerpo de paquete con una función.
Después de eso, estamos llamando a una función del paquete que devuelve un valor de retorno.
Encabezado del paquete :
CREATE OR REPLACE PACKAGE SkyPkg AS
FUNCTION GetSkyColour(vPlanet IN VARCHAR2)
RETURN VARCHAR2;
END;
/
Cuerpo del paquete :
CREATE OR REPLACE PACKAGE BODY SkyPkg AS
FUNCTION GetSkyColour(vPlanet IN VARCHAR2)
RETURN VARCHAR2
AS
vColour VARCHAR2(100) := NULL;
BEGIN
IF vPlanet = 'Earth' THEN
vColour := 'Blue';
ELSIF vPlanet = 'Mars' THEN
vColour := 'Red';
END IF;
RETURN vColour;
END;
END;
/
Llamando a la función desde el cuerpo del paquete :
DECLARE
vColour VARCHAR2(100);
BEGIN
vColour := SkyPkg.GetSkyColour(vPlanet => 'Earth');
DBMS_OUTPUT.PUT_LINE(vColour);
END;
/