Posts PL/SQL vs PL/PGSQL
Post
Cancel

PL/SQL vs PL/PGSQL

Vamos a ver las principales diferencias entre estos dos gestores.

Diferencias en cursores:

Recorreremos los cursores de formas diferentes en los dos gestores.

  • PL/SQL:
1
2
3
4
5
6
7
8
CURSOR c_cursor
IS
SELECT ...
FROM nombretabla;

FOR i IN c_cursor LOOP

END LOOP;
  • PL/PGSQL:
1
2
3
FOR c_cursor IN SELECT ... FROM table LOOP;

END LOOP;
En cuanto a triggers en PL/PGSQL primero creamos la función y después llamamos a dicha función
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE OR REPLACE FUNCTION nombrefuncion RETURNS TRIGGER AS $nombretrigger$
DECLARE

BEGIN

END;
$nombretrigger$ LANGUAGE PLPGSQL



CREATE OR REPLACE nombretrigger
(AFTER OR BEFORE)(INSERT,UPDATE OR DELETE) ON nombretabla
FOR EACH(FILA O SENTENCIA) 
EXECUTE FUNCTION nombrefuncion;
  • PL/SQL:
1
2
3
4
5
6
7
CREATE OR REPLACE TRIGGER name
(AFTER/BEFORE) (INSERT,UPDATE OR DELETE) ON nombretabla
FOR EACH (fila o sentencia)
BEGIN

END;
/
También tendremos que cambiar la forma de imprimir.
  • Mientras que en Oracle es:
1
dbms_output.put_line(‘...’);
  • En PostgreSQL entremos que poner lo siguiente:
1
RAISE NOTICE ‘...’;
En los errores pasa lo mismo
  • Oracle:
1
raise_application_error(-20002,'...');
  • PostgreSQL:
1
RAISE EXCEPTION '...';
Vamos a ver cómo se crean las estructuras de las funciones y la principal diferencia con respecto a Oracle
  • En Oracle terminaremos la función solamente con los siguiente:
1
2
end nombrefuncion;
/
  • Mientras que en PostgreSQL:
1
2
end;
$nombrefuncion$ LANGUAGE plpgsql;
Tablas mutantes

Por último, en cuanto a las tablas mutantes, en oracle se crea con paquetes y en postgres son con tablas temporales.

Crear una tabla temporal

1
2
CREATE TEMP TABLE tbl AS
SELECT * FROM tbl WHERE ... ;

No está seguro de si la tabla ya existe

1
CREATE TABLE IF not EXISTS ...

A continuación:

1
2
INSERT INTO tbl (col1, col2, ...)
SELECT col1, col2, ...
This post is licensed under CC BY 4.0 by the author.