Vamos a ver las principales diferencias entre estos dos gestores.
Diferencias en cursores:
Recorreremos los cursores de formas diferentes en los dos gestores.
1
2
3
4
5
6
7
8
| CURSOR c_cursor
IS
SELECT ...
FROM nombretabla;
FOR i IN c_cursor LOOP
END LOOP;
|
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;
|
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;
/
|
- Mientras que en Oracle es:
1
| dbms_output.put_line(‘...’);
|
- En PostgreSQL entremos que poner lo siguiente:
En los errores pasa lo mismo
1
| raise_application_error(-20002,'...');
|
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:
- 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, ...
|