Der CYBERTEC Migrator ist in der Lage, bestimmte PL/SQL-Konstrukte zu parsen, zu analysieren und automatisch nach PL/pgSQL zu transpilieren. Jedes unterstützte Konstrukt wird durch eine entsprechende Regel dargestellt.
Dieses Feature-Set wird ständig weiterentwickelt, wobei neue Regeln hinzugefügt werden, wo immer dies möglich ist. Wenn Sie einen Vorschlag für eine neue Regel haben, öffnen Sie bitte einen feature request.
In Oracle kann eine Prozedur ohne Parameter in ihrer Definition Klammern weglassen, während PostgreSQL sie immer benötigt.
-- PL/SQL
CREATE PROCEDURE proc IS ...;
-- PL/pgSQL
CREATE PROCEDURE proc() IS ...;
Die Körper von Funktionen und Prozeduren in Oracle beginnen immer mit IS|AS BEGIN ...
, welche zu PostgreSQLs AS $$ ...
angepasst werden müssen.
-- PL/SQL
CREATE PROCEDURE proc IS BEGIN ...;
-- PL/pgSQL
CREATE PROCEDURE proc AS $$ BEGIN ...;
Das Gegenstück zu CYAR-0002, welches sich um den Epilog von Oracle Funktionen und Prozeduren kümmert.
Der optionale Block-Identifier wird entfernt, und die LANGAGE
wird eingefügt.
-- PL/SQL
CREATE PROCEDURE proc IS BEGIN ... END;
-- PL/pgSQL
CREATE PROCEDURE proc IS BEGIN ... END proc; $$ LANGUAGE plpgsql;
Transpiliert Verwendung von Oracles trunc()
Funktion, abhängig nach Argument-Typ.
Diese Regel ist noch nicht implementiert worden.
Transpiliert Oracles SYSDATE
,
welche die aktuelle Systemzeit zurückgibt (im Gegensatz zu der der Anweisung oder der Transaktion) zu
PostgreSQL’s clock_timestamp()
.
-- PL/SQL
SELECT sysdate FROM dual;
-- PL/pgSQL
SELECT clock_timestamp() FROM dual;
Ersetz Oracles NVL
mit PostgreSQLs coalesce
.
-- PL/SQL
SELECT nvl(dummy, 'null') FROM dual;
-- PL/pgSQL
SELECT coalesce(dummy, 'null') FROM dual;
Da PostgreSQL das Konzept von Editioning nicht besitzt werden die EDITIONABLE
und NONEDITIONABLE
Keywords in Funktionen und Prozeduren entfernt.
-- PL/SQL
CREATE EDITIONABLE PROCEDURE proc ...;
-- PL/pgSQL
CREATE PROCEDURE proc ...;
Ersetzt Oracles NVL2
mit einer CASE
Anweisung.
-- PL/SQL
SELECT NVL2(dummy, 1, 2) FROM dual;
-- PL/pgSQL
SELECT CASE WHEN dummy IS NOT NULL THEN 1 ELSE 2 END FROM dual;