Saltar a contenido

PL/SQL vs PL/PGSQL

En este post veremos las principales diferencias entre la programación en PL/SQL de Oracle y PL/PGSQL de Postgres.

Triggers

Las principales diferencias encontradas a la hora de escribir un programa en PL/SQL y PL/PGSQL radica a la hora de crear un trigger.

Mientras que en PL/SQL tendría la siguiente estructura:

1
2
3
4
5
6
7
CREATE OR REPLACE TRIGGER nombretrigger
(AFTER/BEFORE) (INSERT,UPDATE OR DELETE) ON tabla
FOR EACH (fila o sentencia)
BEGIN
    ...
END;
/

En PL/PGSQL, no existe el trigger como tal, sino que creamos una función que hará lo que deseemos que haga el trigger y posteriormente crearemos un trigger para llamar a esa función y le dirá cuando actuar. La estructura quedaría de la siguiente manera:

  • Función:
1
2
3
4
5
6
7
CREATE OR REPLACE FUNCTIO nombrefuncion RETURNS TRIGGER AS $nombretrigger$
DECLARE
    ...
BEGIN
    ...
END;
$nombretrigger$ LANGUAGE PLPGSQL
  • Trigger:
1
2
3
4
CREATE OR REPLACE nombretrigger
(AFTER OR BEFORE)(INSERT,UPDATE OR DELETE) ON tabla
FOR EACH(FILA O SENTENCIA) 
EXECUTE FUNCTION nombrefuncion;

Cursores

Por otro lado, también cambia la forma de recorrer un CURSOR con un FOR. Mientras que en PL/SQL se crea el CURSOR y luego se recorre:

1
2
3
4
5
6
7
8
9
CURSOR c_cursor
IS
SELECT campo1, campo2
FROM tabla;
...

FOR i IN c_cursor LOOP
    ...
END LOOP;

En PL/PGSQL sería:

1
2
3
FOR c_cursor IN SELECT campo1, campo2 FROM tabla LOOP;
    ...
END LOOP;

Por último, aunque un poco menos importante, a la hora de crear funciones, el "IS" para declarar variables y cursores en PL/SQL, es sustituido por "DECLARE" en PL/PGSQL.