Está en la página 1de 2

PSM

(Persistent Stored Modules)

El estándar SQL/PSM (PSM por Persistent Stored Modules), especifica la


sintaxis de la lógica procedimental de los módulos del servidor de SQL. Ya en
los años noventa del siglo 20 era evidente que la norma ANSI SQL carece de
medios para crear procedimientos almacenados (especialmente trabajando con
variables y control de flujo - bucles y condicionales). Las bases de datos
comerciales empezaron a aplicar sus propios lenguajes propietarios para este
fin. Los más populares incluyen PL / SQL (Oracle, 1992), T-SQL (Sybase y
Microsoft, 1995) y SPL (Informix, 1996). Desde 1990 un grupo de
desarrolladores de todo Jim Melton, parte de la comisión de ANSI SQL para las
normas, comenzó a trabajar en este problema. En 1998, un proyecto de la
nueva norma se convirtió en parte de SQL3 - bajo el nombre de SQL / PSM
(ANSI / ISO / IEC 9075-4:1999). Desafortunadamente en ese momento la
mayoría de las grandes empresas tienen sus propios idiomas (incompatible con
el estándar) y se negó a abandonar a favor de la norma. SQL / PSM se llevó a
cabo sólo en los RDBMS, en los que no había apoyo para los procedimientos
almacenados antes de 1998. Excepto para DB2 (PL SQL, IBM, 2001), todos
ellos eran menores RDBMS: Miner, sólido, Servidor 602SQL. Después de 2005,
el estándar SQL / PSM comenzó a ser más populares, cuando se llevó a cabo en
Advantage Database Server (Sybase iAnywhere, 2005), MySQL (2005) y
PostgreSQL (2007). Implementación de SQL / PSM suele ser incompleta, PL
SQL en DB2 es considerada como una de las mejores implementaciones.
Aplicación de PostgreSQL se llama PL / pgPSM (utilizando el esquema de
nomenclatura estándar en PostgreSQL).

Instrucciones con PL / pgPSM:

Antes de escribir código en PL / pgPSM sew debe seguir los siguientes


consejos:

• Utilizar el estándar de codificación recomendado.


• Usar comentarios y nombres de variables claros.
• Utilizar una identación de bloque coherente.
• No escribir un procedimiento largo (máximo 50 líneas).

Hay también algunas recomendaciones adicionales para los lenguajes en


general SQL para procedimientos almacenados:

• Uso de un prefijo y un nombre de atributo calificado para evitar conflicto de


nombres de atributos y variables.
• Utilizar el control de excepciones consistentes.
• Evitar la programación ISAM – Si es posible use SQL.
• Tener cuidado acerca de los recursos – uso limitado de cursores y tablas
temporales.
• No modificar los datos de disparadores (tiggers)
• Los procedimientos deben realizar tareas concretas, no sólo encapsular los
selecciona.

Los siguientes dos ejemplos muestran la misma tarea, pero la primera


aplicación se considera incorrecta. Ambos procedimientos almacenados usan
select para groupos de empleados y print_info para cada miembro del grupo.

-- Incorrecto (ISAM usage)


CREATE OR REPLACE FUNCTION report_a()
RETURNS void AS
$ $
main: FOR outer AS
SELECT id FROM Users
DO
BEGIN
DECLARE name, surname varchar;
DECLARE age int;
SET (name, surname, age) = (SELECT e.name, e.surname, e.age
FROM Employers e
WHERE e.id = outer.id);
IF age >= 20 AND age <= 29 THEN
CALL print_info(name, surname, age, 'y');
ELSE IF age >=30 AND age <= 50 THEN
CALL print_info(name, surname, age, 'o');
END IF;
END;
END FOR main;
$ $ LANGUAGE plpgpsm;

-- Correcto
CREATE OR REPLACE FUNCTION report_b()
RETURNS void AS
$ $
main: FOR fc AS
- Instrucción SELECT se utiliza para la opción de la selección
limitada de los empleados basándose en las condiciones

SELECT e.*, CASE WHEN e.age BETWEEN 20 AND 29 THEN 'y'


WHEN e.age BETWEEN 30 AND 50 THEN 'o' END AS tp
FROM Employers e
WHERE e.age BETWEEN 20 AND 50
DO
CALL print_info(fc.name, fc.surname, fc.age, fc.tp);
END FOR main;
$$ LANGUAGE plpgpsm;

También podría gustarte