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;
/


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow