Oracle/PL/SQL/Ejecutables

< Oracle‎ | PL/SQL

Los bloques de PL/SQL pueden ser anónimos o tener un nombre. Éstos últimos se almacenan en la base, y de esta forma se crean objetos ejecutables, que según su objetivo se denominan procedimientos, funciones, paquetes y triggers.

Ejemplo: Declaración de una función que recibe un texto y devuelve un número

create or replace function funcion (p_arg varchar2) return number is
-- Bloque PL/SQL

Paquetes

editar

Un paquete es un objeto de PL/SQL que agrupa procedimientos y funciones.

Tiene dos partes:

  • Especificación (spec): Donde se declaran variables, funciones y procedimientos públicos
create or replace package paquete is

  texto Varchar2(10) := 'Un texto';

  procedure suma (a Number, b Number, resultado out Number);

  function suma (a Number, b Number) return Number;

end paquete;
/
  • Cuerpo (body): Donde se define el código de funciones y procedimientos de la especificación y opcionalmente variables y funciones y procedimientos privados
create or replace package body paquete is

  procedure suma (a Number, b Number, resultado out Number) is
  begin
    resultado := a + b;
  end;

  function suma (a Number, b Number) return Number is
  begin
    return a + b;
  end;

end paquete;
/

Se permite la sobrecarga de funciones y procedimientos, que utilizando el mismo nombre, tienen diferentes tipo o cantidad de argumentos. La diferenciación se realiza por los tipos de datos, la forma de acceso (IN | OUT) y la cantidad de los argumentos.

Permisos

editar

Los objetos ejecutables utilizan los permisos del dueño del objeto.

Sin embargo, en ocasiones es preferible utilizar los permisos del usuario actualmente conectado. Para esto se utiliza la directiva AUTHID CURRENT_USER.

Ejemplo: Declaración de función con permisos del usuario conectado

create or replace function funcion (p_arg varchar2) return number
AUTHID CURRENT_USER is
-- Bloque PL/SQL

Utilizada en un paquete, la directiva se aplica a todos los procedimientos y funciones del mismo.