Oracle to PostgreSQL Conversion Tool by Ispirer, Free Trial

Oracle to PostgreSQL Migration Tool

Looking for a reliable and vigorous solution for migrating your database? Let's do it with us!

Migrate Oracle to PostgreSQL

Make the most of automated migration to focus on your business core

Get started. Check migration plans

Many companies used our tools and have provided excellent feedback on its performance

  • Capterra logo

    4.8

  • Clutch logo

    4.8


6 undeniable facts to choose conversion with Ispirer

  • Fact 1/6

    Reduced costs

    Migrating to a more efficient database can lower operational costs by reducing hardware and software maintenance requirements, optimizing resource utilization, and lowering licensing fees.

    Improved performance -- card image
  • Fact 2/6

    Modernization and innovation

    Migrating to a modern database platform can enable the adoption of new technologies and features, unlocking new business opportunities and driving innovation.

    Enhanced security -- card image
  • Fact 3/6

    Added AI precision

    An AI-driven migration toolkit can automate complex tasks, reduce errors, optimize workflows, and accelerate the process, ensuring smoother transitions while minimizing costly system downtime.

    Reduced costs -- card image
  • Fact 4/6

    Enhanced security

    Newer databases often incorporate advanced security features like encryption, access controls, and threat detection mechanisms, providing better protection against data breaches and cyberattacks.

    Modernization and innovation -- card image
  • Fact 5/6

    Legacy system transformation

    Migrating legacy databases to modern systems can upgrade your database, making it easier to maintain, update, and extend in the long run.

    Legacy system transformation -- card image
  • Fact 6/6

    No need for documentation

    We perform the migration using the source code. There is no need for detailed documentation to begin the migration as there is in development.

    No need for documentation -- card image

Migration opportunities with Ispirer

Ispirer Ecosystem automates your migration routine to enable quick and smart transformation of any database. Double the migration speed with our comprehensive solutions.

  • With Ispirer Toolkit only

    • Free Assessment tool to analyze your database and estimate migration complexity
    • Assistance in Ispirer Toolkit configuration
    • Automated migration of the entire database schema, tables, SQL objects, business logic, and data with Ispirer Toolkit
    • Timely customization of the Ispirer Toolkit to maximize automation rate
    • Expert support
    Get started — it’s free

    Trial is free. No payment

    With Ispirer Toolkit -- card image
  • With Ispirer Toolkit as a part of migration service

    • Detailed analysis of your database and tailored migration roadmap
    • Migration of data and database schema, including SQL objects, business logic, and tables
    • Team of database conversion experts and a dedicated Project Manager
    • Regular updates on the project status
    • Post-migration refinement and testing
    Get started — it’s free

    Trial is free. No payment

    With Ispirer Toolkit -- card image

Ispirer Ecosystem for automated migration

Ispirer Toolkit is a solution for automated heterogeneous database migration. Using it, you can transfer tables and data, stored procedures, functions, packages, views, and triggers. This solution is based on an intelligent proprietary algorithm that analyzes data types, relationships between objects, reserved words, and code structures that do not have equivalents in a target technology.

AI-powered SQLWays

Schema migration

Migrate Smarter. Evolve Faster

Over 400+ ways to migrate

Give it a try now. Book a demo

Dive into tool’s features

  • PostgreSQL
  • Oracle
  • AlloyDB
  • SQL Server
  • Informix
  • MySQL
  • DB2
  • MariaDB
  • Sybase ASE
  • PostgreSQL
  • Oracle
  • AlloyDB
  • SQL Server
  • Informix
  • MySQL
  • DB2
  • MariaDB
  • Sybase ASE
  • MSSQL
  • COBOL
  • Azure
  • Progress 4GL
  • SAP
  • PowerBulder
  • .NET
  • Delphi
  • MSSQL
  • COBOL
  • Azure
  • Progress 4GL
  • SAP
  • PowerBulder
  • .NET
  • Delphi

Migration details overview

  • Ispirer Toolkit automates

    Ispirer Toolkit automates icon

    Ispirer Toolkit automates the entire migration of database objects from Oracle to PostgreSQL

    Both conversion with connection to the source database, as well as conversion of files containing PL/SQL scripts are possible. The first option is most recommended, as the tool will get all the required information about object dependences directly from the database. Ispirer Toolkit can migrate the following objects: tables, views, functions, procedures, packages (specification and body), triggers, sequences, collection and object types. As a result, each separate database object is converted to its equivalent in PostgreSQL.

    If you have your own applications, the Embedded SQL and Database APIs can be converted using either Ispirer Toolkit or Ispirer Service. They will be able to work with your new PostgreSQL database.

  • Table and Data Conversion

    Table and Data Conversion icon

    Ispirer Toolkit converts tables with all related objects

    Indexes, referential integrity constraints, and data are migrated to the target PostgreSQL database. All Oracle native data types are converted to the PostgreSQL equivalents.

    If necessary, the user can change the default settings of data type mapping.

  • Procedure, Function and Trigger Conversion

    SQL objects icon

    SQL objects

    Oracle user procedures and functions are converted to stored procedures and functions written in PostgreSQL syntax, depending on the version of the target database. Packages are converted to a separate set of objects - procedures and functions.

    Package-level variables icon

    Package-level variables and constants are taken into account

    They are migrated to tables that store the actual values, and a set of functions that define and get values of those tables.

    Triggers icon

    Ispirer Toolkit automatically migrates Oracle triggers to the trigger function, and the trigger itself to the PostgreSQL database

    Oracle trigger logic is moved to the trigger function as well. The tool then generates a trigger that calls this trigger function.

  • Built-in Functions and Procedures Conversion

    Built-in Functions and Procedures icon

    Oracle built-in functions and procedures are converted to their equivalents in PostgreSQL

    If there is none, the tool will try to convert the functions to PostgreSQL expressions. They will emulate the same behavior or generate a user-defined function that will work the same way as in the Oracle database.

  • Working with Collections and their Methods

    Working with Collections icon

    Ispirer Toolkit supports collection conversion of all three types: Associative array, Nested table, Variable-size array (varray)

    They are converted to a PostgreSQL table. Then a set of user-defined functions is generated. This allows to work with values in such tables.

  • Oracle Supplied PL/SQL Package Conversion

    Oracle Supplied PL/SQL Package Conversion icon

    Ispirer Toolkit supports conversion of some Supplied PL/SQL Packages, such as UTL_FILE, DBMS_LOB and others

    The list can be expanded depending on the requirements of your conversion project.

Move your migration project to the next level. Migrate logic from database to application

Ispirer has a solution to unlock the full potential of your database. Our team helps you to move business logic to an application layer seamlessly to advance the database performance.

Source database

  • Oracle
  • SQL Server
Read-only access

ODBC

Files with business logic SQL code

  • Oracle
  • SQL Server
How Migration work

Seamless integration, limitless possibilities!

Application target Code

  • Java
  • JDBC
  • .NET
  • Spring
  • Hibernate
  • Automated conversion of SQL objects to application code. Ispirer Ecosystem supports Oracle, SQL Server, Sybase, PostgreSQL, Java, C#, Python, etc.
  • In case of changing the RDBMS, embedded SQL will be automatically rewritten to adhere to the syntax of the new database.
  • Migration with or without connection to databases. Both options allow you to successfully migrate business logic from the database to the application layer. However, connecting to the database allows the migration tool to take into account additional data from the database and helps improve the conversion.

Migration with\without connection to databases.

  • / If RDBMS changes, EmbeddedSQL will be automatically rewritten to adhere to the new database syntax
  • / Ispirer Toolkit supports Oracle, SQL Server, Sybase, PostgreSQL, Java, C#, Python, etc.
  • / Automated SQL objects conversion to application code
  • / Migration with\without connection to databases.
  • Unlock agility: shift your database logic to the application layer!

    Transform faster, scale smarter—see how moving from database to application layer drives real results. Let’s modernize it together.

    Learn more

    Explore our comprehensive migration solutions

Migration demo

Check out how Ispirer Toolkit migrates databases efficiently, minimizing the need for manual corrections

Ispirer database migration service overview

Migration

  • DB schema conversion
  • Data migration testing
  • Data integrity testing
  • APP changes: API, ESQL, logic shift to APP layer

Assessment

  • Obtaining access
  • Project discussion
  • Making migration plan
  • Creating SOW
Start

More than 2K users use this way to
successfully convert their application code

Manual review & corrections

  • Manual corrections
  • Internal testing

Functional testing

  • Creating snapshots with data
  • Testing APP and DB on snapshots
  • Fixing all logical issues

Performance testing

  • Performance testing
  • Converted code review
  • Code refactoring
  • Extra code optimization

Data migration

  • Prod data migration

Cutover

  • Switching DB and APP
  • Providing user access
  • System startup
  • Obtaining access
  • Project discussion
  • Making migration plan
  • Creating SOW
  • DB schema conversion
  • Data migration testing
  • Data integrity testing
  • APP changes: API, ESQL, logic shift to APP layer
  • Manual corrections
  • Internal testing
  • Creating snapshots with data
  • Testing APP and DB on snapshots
  • Fixing all logical issues
  • Performance testing
  • Converted code review
  • Code refactoring
  • Extra code optimization
  • Prod data migration
  • Switching DB and APP
  • Providing user access
  • System startup

Conversion Samples of Oracle to PostgreSQL

Ispirer Toolkit analyzes all object dependencies during the conversion process and provides not only line-by-line conversion, but resolves type conversions as well. The software understands and transforms the necessary inheritance dependencies. It parses the entire source code, builds an internal tree with all the information about the objects, and uses it in the migration process.

The code samples below provide you with more details.

  • Oracle Collections conversion:

    Oracle

    1.  
    2. CREATE TYPE employee AS OBJECT (
    3. id NUMBER,
    4. Name VARCHAR(300)
    5. );
    6. CREATE TYPE employees_tab IS TABLE OF employee;
    7.  
    8. CREATE OR REPLACE PROCEDURE hire(EMPLOYEES in out employees_tab, id NUMBER, Name VARCHAR) AS
    9. NEW_EMPLOYEES employees_tab := employees_tab();
    10. BEGIN
    11. EMPLOYEES.Extend(1);
    12. EMPLOYEES(EMPLOYEES.count) := employee(id, Name);
    13. FOR i IN EMPLOYEES.first..EMPLOYEES.last
    14. LOOP
    15. INSERT INTO emp_tab values (EMPLOYEES(i).id, EMPLOYEES(i).Name);
    16. END LOOP;
    17. INSERT INTO EMP_TAB SELECT * FROM TABLE(EMPLOYEES);
    18. NEW_EMPLOYEES.Extend(EMPLOYEES.count);
    19. NEW_EMPLOYEES.Delete;
    20. END;
    21.  

    → PostgreSQL

    1.  
    2. CREATE TYPE employee AS(id NUMERIC,Name VARCHAR(300));
    3. -- CREATE TYPE employees_tab IS TABLE OF employee;
    4.  
    5. CREATE OR REPLACE PROCEDURE hire(INOUT EMPLOYEES employee[] , id NUMERIC, Name VARCHAR)
    6. LANGUAGE plpgsql
    7. AS $$
    8. DECLARE
    9. NEW_EMPLOYEES employee[] default array[]:: employee[];
    10. BEGIN
    11. EMPLOYEES[coalesce(array_length(EMPLOYEES,1),0)+1] := null;
    12. EMPLOYEES[coalesce(array_length(EMPLOYEES,1),0)] := row(id,Name);
    13. FOR i IN array_lower(EMPLOYEES,1) .. array_upper(EMPLOYEES,1)
    14. LOOP
    15. INSERT INTO emp_tab values(EMPLOYEES[i].id, EMPLOYEES[i].Name);
    16. END LOOP;
    17. INSERT INTO EMP_TAB SELECT * FROM UNNEST(EMPLOYEES);
    18. for i in 1 .. coalesce(array_length(EMPLOYEES,1),0) loop
    19. NEW_EMPLOYEES[coalesce(array_length(NEW_EMPLOYEES,1),0)+1] := null;
    20. end loop;
    21. NEW_EMPLOYEES := array[]:: employee[];
    22. END; $$;
    23.  
  • Package objects transformation:

    Oracle

    1.  
    2. CREATE OR REPLACE EDITIONABLE PACKAGE BODY "COMMON_PKG" AS
    3.  
    4. CUSTOMER_ID NUMBER(10,0);
    5. TYPE VARCHAR2_AARAY IS TABLE OF VARCHAR2(50) INDEX BY PLS_INTEGER;
    6. ADDRES_LST VARCHAR2_AARAY;
    7.  
    8. PROCEDURE PREPARE_CUSTOMER_ADRESSS_BY_ID(CITY_NAME VARCHAR2, CUSTTYPE_ID VARCHAR2)
    9. IS
    10. CUR_ADDR VARCHAR2(500);
    11. CUSTM_ID NUMBER;
    12. v_int number;
    13. V_RES DBMS_UTILITY.lname_array;
    14. l_clob clob;
    15. cursor cus_addr(cur_id number) is select address from customer where cust_id = cur_id or cust_id <5;
    16. BEGIN
    17. l_clob := '';
    18. select CUST_ID into CUSTM_ID
    19. from customer
    20. where CITY = CITY_NAME and CUST_TYPE_CD = CUSTTYPE_ID and ROWNUM <= 1;
    21. open cus_addr(CUSTM_ID);
    22. fetch cus_addr into CUR_ADDR;
    23. WHILE(cus_addr%found)
    24. loop
    25. l_clob := l_clob || CUR_ADDR||',';
    26. fetch cus_addr into CUR_ADDR;
    27. end loop;
    28. if cus_addr%isopen then
    29. close cus_addr;
    30. end if;
    31. dbms_output.put_line( rtrim(l_clob,',') );
    32.  
    33. END;
    34.  
    35.  
    36. PROCEDURE GET_FIST_NAME_OF_EMPLOYEE_BY_START_DATE(STRT_DATE DATE) is
    37.  
    38. EMPLOYEE_REC EMPLOYEE%ROWTYPE;
    39. cursor cur_start_date is select * from EMPLOYEE;
    40. BEGIN
    41. open cur_start_date;
    42. fetch cur_start_date into EMPLOYEE_REC;
    43. WHILE(cur_start_date%found)
    44. loop
    45. if EMPLOYEE_REC.START_DATE < STRT_DATE THEN
    46. goto loop_again;
    47. end if;
    48. DBMS_OUTPUT.PUT_LINE(EMPLOYEE_REC.FIRST_NAME || ' ' ||EMPLOYEE_REC.LAST_NAME );
    49. <<loop_again>>
    50. fetch cur_start_date into EMPLOYEE_REC;
    51. end loop;
    52. if cur_start_date%isopen then
    53. close cur_start_date;
    54. end if;
    55. END;
    56.  
    57. END COMMON_PKG;
    58.  

    → PostgreSQL

    1.  
    2. CREATE SCHEMA IF NOT EXISTS COMMON_PKG;
    3.  
    4. -- TYPE VARCHAR2_AARAY IS TABLE OF VARCHAR2(50) INDEX BY PLS_INTEGER;
    5.  
    6. DROP TYPE IF EXISTS COMMON_PKG.GL_VAR_TYPE CASCADE;
    7. CREATE type COMMON_PKG.GL_VAR_TYPE
    8. as(CUSTOMER_ID BIGINT,
    9. ADDRES_LST VARCHAR(50)[]);
    10. CREATE OR REPLACE FUNCTION COMMON_PKG.INIT_GL_VAR()
    11. RETURNS VOID LANGUAGE plpgsql
    12. AS $$
    13. BEGIN
    14.  
    15. CREATE TEMPORARY TABLE COMMON_PKG_GL_VAR AS SELECT(array[]:: VARCHAR(50)[]):: COMMON_PKG.GL_VAR_TYPE AS SWV_GL_VAR_VAL;
    16. RETURN;
    17. EXCEPTION
    18. WHEN SQLSTATE '42P07' THEN
    19. NULL;
    20. END; $$;
    21. CREATE OR REPLACE FUNCTION COMMON_PKG.GET_GL_VAR()
    22. RETURNS COMMON_PKG.GL_VAR_TYPE LANGUAGE plpgsql
    23. AS $$
    24. DECLARE
    25. SWV_GL_VAR COMMON_PKG.GL_VAR_TYPE;
    26. BEGIN
    27.  
    28. RETURN(select SWV_GL_VAR_VAL:: COMMON_PKG.GL_VAR_TYPE from COMMON_PKG_GL_VAR);
    29. EXCEPTION
    30. WHEN OTHERS THEN
    31. PERFORM COMMON_PKG.INIT_GL_VAR();
    32. RETURN(select SWV_GL_VAR_VAL:: COMMON_PKG.GL_VAR_TYPE from COMMON_PKG_GL_VAR);
    33. END; $$;
    34. CREATE OR REPLACE PROCEDURE COMMON_PKG.SET_GL_VAR(SWP_GLVAR COMMON_PKG.GL_VAR_TYPE)
    35. LANGUAGE plpgsql
    36. AS $$
    37. BEGIN
    38.  
    39. UPDATE COMMON_PKG_GL_VAR SET SWV_GL_VAR_VAL = SWP_GLVAR;
    40. END; $$;
    41. CREATE OR REPLACE PROCEDURE COMMON_PKG.GET_CUSTID_BY_PARAMS(CITY_NAME VARCHAR,
    42. CUST_ID_CD VARCHAR,
    43. OUT CUST_ID NUMERIC)
    44. LANGUAGE plpgsql
    45. AS $$
    46. DECLARE
    47. SWV_GL_VAR COMMON_PKG.GL_VAR_TYPE DEFAULT COMMON_PKG.GET_GL_VAR();
    48. IN_ID BIGINT;
    49. BEGIN
    50.  
    51. select CUST_ID into STRICT IN_ID
    52. from CUSTOMER
    53. where CITY = CITY_NAME and CUST_TYPE_CD = CUST_ID_CD LIMIT 1;
    54. CUST_ID := IN_ID;
    55. END; $$;
    56. CREATE OR REPLACE PROCEDURE COMMON_PKG.PREPARE_CUSTOMER_ADRESSS_BY_ID(CITY_NAME VARCHAR, CUSTTYPE_ID VARCHAR)
    57. LANGUAGE plpgsql
    58. AS $$
    59. DECLARE
    60. SWV_GL_VAR COMMON_PKG.GL_VAR_TYPE DEFAULT COMMON_PKG.GET_GL_VAR();
    61. CUR_ADDR VARCHAR(500);
    62. CUSTM_ID NUMERIC;
    63. v_int NUMERIC;
    64. V_RES VARCHAR(4000)[] default array[]:: VARCHAR(4000)[];
    65. l_clob TEXT;
    66. CUS_ADDR cursor(cur_id NUMERIC) FOR select ADDRESS from CUSTOMER where cust_id = cur_id or cust_id < 5;
    67. BEGIN
    68.  
    69. l_clob := '';
    70. select CUST_ID into STRICT CUSTM_ID
    71. from CUSTOMER
    72. where CITY = CITY_NAME and CUST_TYPE_CD = CUSTTYPE_ID LIMIT 1;
    73. open CUS_ADDR(CUSTM_ID);
    74. fetch CUS_ADDR into CUR_ADDR;
    75. WHILE FOUND
    76. loop
    77. l_clob := CONCAT(l_clob,CUR_ADDR,',');
    78. fetch CUS_ADDR into CUR_ADDR;
    79. end loop;
    80. if EXISTS(SELECT 1 FROM pg_cursors WHERE NAME ilike 'CUS_ADDR') then
    81. close CUS_ADDR;
    82. end if;
    83. RAISE NOTICE '%',NULLIF(rtrim(l_clob,','),'');
    84. END; $$;
    85. CREATE OR REPLACE PROCEDURE COMMON_PKG.GET_FIST_NAME_OF_EMPLOYEE_BY_START_DATE(STRT_DATE TIMESTAMP)
    86. LANGUAGE plpgsql
    87. AS $$
    88. DECLARE
    89. SWV_GL_VAR COMMON_PKG.GL_VAR_TYPE DEFAULT COMMON_PKG.GET_GL_VAR();
    90. EMPLOYEE_REC EMPLOYEE%ROWTYPE;
    91. CUR_START_DATE cursor FOR select * from EMPLOYEE;
    92. BEGIN
    93.  
    94. open CUR_START_DATE;
    95. fetch CUR_START_DATE into EMPLOYEE_REC;
    96. WHILE FOUND
    97. loop
    98. << loop_again >>
    99. BEGIN
    100. if EMPLOYEE_REC.START_DATE < STRT_DATE THEN
    101. EXIT loop_again;
    102. end if;
    103. RAISE NOTICE '%',CONCAT(EMPLOYEE_REC.FIRST_NAME,' ',EMPLOYEE_REC.LAST_NAME);
    104. END;
    105. fetch CUR_START_DATE into EMPLOYEE_REC;
    106. end loop;
    107. if EXISTS(SELECT 1 FROM pg_cursors WHERE NAME ilike 'CUR_START_DATE') then
    108. close CUR_START_DATE;
    109. end if;
    110. END; $$;
    111.  
  • Hierarchical query conversion:

    Oracle

    1.  
    2. create or replace Procedure sp_hier_with_cte_and_rownum (configList IN varchar2)
    3. IS
    4. refcur sys_refcursor;
    5. BEGIN
    6. FOR refcur IN (
    7. with test as
    8. (select configList from dual)
    9. select regexp_substr(configList, '[^;]+', 1, rownum) config
    10. from test
    11. connect by level <= length (regexp_replace(configList, '[^;]+')) +1
    12. )
    13. LOOP
    14. dbms_output.put_line('config= '||refcur.config);
    15. END LOOP;
    16. END;
    17.  

    → PostgreSQL

    1.  
    2. create or replace Procedure sp_hier_with_cte_and_rownum(IN configList VARCHAR)
    3. LANGUAGE plpgsql
    4. AS $$
    5. DECLARE
    6. refcur REFCURSOR;
    7. SWV_REFCUR_rec RECORD;
    8. BEGIN
    9. FOR SWV_REFCUR_rec IN(
    10. WITH RECURSIVE
    11. test as(select configList),
    12. TabAl_cte AS(SELECT 1 AS LEVEL
    13. UNION ALL
    14. SELECT TabAl_cte.LEVEL+1 AS LEVEL
    15. FROM TabAl_cte, test
    16. WHERE(TabAl_cte.LEVEL+1) <= length(regexp_replace(test.configList,'[^;]+','','g'))+1)
    17. SELECT SWF_REGEXP_SUBSTR(test.configList,'[^;]+',1,row_number() over()) AS config
    18. FROM TabAl_cte,test)
    19. LOOP
    20. RAISE NOTICE '%',CONCAT('config= ',SWV_REFCUR_rec.config);
    21. END LOOP;
    22. END; $$;
    23.  
  • Dynamic code conversion:

    Oracle

    1.  
    2. CREATE OR REPLACE PROCEDURE DYNAMIC_DELETE
    3. AS
    4. TAB_NAME VARCHAR2(15):='FOR_TYPE';
    5. TAB_COL VARCHAR2(12):='COL1';
    6. TAB_COL2 VARCHAR2(12):='COL2';
    7. COL_VALUE INTEGER:=2000;
    8. SQL_DELETE VARCHAR2(200);
    9. BEGIN
    10. SQL_DELETE:='DELETE '||TAB_NAME||' WHERE ' || TAB_COL2 || '=SYSDATE+5 AND ' ||TAB_COL||' < :value ';
    11. EXECUTE IMMEDIATE SQL_DELETE USING COL_VALUE;
    12.  
    13. EXECUTE IMMEDIATE 'begin EXAMPLE_PROC; end;';
    14. END;
    15.  

    → PostgreSQL

    1.  
    2. CREATE OR REPLACE PROCEDURE DYNAMIC_DELETE()
    3. LANGUAGE plpgsql
    4. AS $$
    5. DECLARE
    6. TAB_NAME VARCHAR(15) DEFAULT 'FOR_TYPE';
    7. TAB_COL VARCHAR(12) DEFAULT 'COL1';
    8. TAB_COL2 VARCHAR(12) DEFAULT 'COL2';
    9. COL_VALUE INTEGER DEFAULT 2000;
    10. SQL_DELETE VARCHAR(200);
    11. BEGIN
    12. SQL_DELETE := 'DELETE FROM ' || TAB_NAME || ' WHERE ' || TAB_COL2 || '= LOCALTIMESTAMP+INTERVAL ''5 day'' AND ' || TAB_COL || ' <%1$L ';
    13. EXECUTE format(SQL_DELETE,COL_VALUE);
    14.  
    15. EXECUTE 'DO LANGUAGE plpgsql $anonymous_block$ BEGIN CALL EXAMPLE_PROC(); END; $anonymous_block$';
    16. END; $$;
    17.  
  • PRAGMA AUTONOMOUS_TRANSACTION conversion:

    Oracle

    1.  
    2. CREATE PROCEDURE AUTO_TEST (id_value number, text_value varchar2)
    3. IS
    4. PRAGMA AUTONOMOUS_TRANSACTION;
    5. BEGIN
    6. INSERT INTO AUTONOMOUS_EVENT (id, value)
    7. VALUES(id_value, text_value);
    8. COMMIT;
    9. END AUTO_TEST;
    10.  

    → PostgreSQL

    1.  
    2. CREATE EXTENSION IF NOT EXISTS dblink;
    3.  
    4. --use superuser to run this script
    5. CREATE SERVER SWL_targetDBname_link FOREIGN DATA WRAPPER dblink_fdw
    6. OPTIONS (hostaddr '127.0.0.1', dbname 'targetDBname');
    7.  
    8. CREATE USER MAPPING FOR targetUser SERVER SWL_targetDBname_link
    9. OPTIONS (user 'targetUser', password 'pass');
    10.  
    11. GRANT USAGE ON FOREIGN ERVER SWL_targetDBname_link TO targetUser;
    12.  
    13. -- procedure code
    14. CREATE OR REPLACE PROCEDURE AUTO_TEST(id_value DOUBLE PRECISION, text_value VARCHAR,IN is_recursive BOOLEAN DEFAULT false)
    15. LANGUAGE plpgsql
    16. AS $$
    17. DECLARE
    18. v_sql text;
    19. BEGIN
    20. IF is_recursive = FALSE THEN
    21. BEGIN
    22. IF NOT EXISTS(SELECT 1 FROM DBLINK_GET_CONNECTIONS()
    23. WHERE dblink_get_connections@> '{myconn}') THEN
    24. PERFORM DBLINK_CONNECT('myconn','SWL_targetDBname_link');
    25. END IF;
    26. v_sql := FORMAT('CALL AUTO_TEST( id_value => %L, text_value => %L, is_recursive => TRUE )',id_value,text_value);
    27. PERFORM DBLINK('myconn',v_sql);
    28. END;
    29. ELSE
    30. --procedure body
    31. INSERT INTO AUTONOMOUS_EVENT(ID, VALUE)
    32. VALUES(id_value, text_value);
    33.  
    34. COMMIT;
    35. END IF;
    36. END; $$;
    37.  
  • XML functions conversion:

    Oracle

    1.  
    2. with demo1 as(
    3. select XMLType(
    4. '<hello-world>
    5. <word seq="1">Hello</word>
    6. <word seq="2">world</word>
    7. </hello-world>
    8. ') XML
    9. from dual
    10. )
    11. select
    12. t.xml.extract('//word[@seq=1]/text()').getStringVal() col1
    13. , decode(t.xml.extract('//word[@seq=1]/text()').getStringVal(), 'Hello', 'Hell', 'END') col2
    14. from demo1 t
    15.  

    → PostgreSQL

    1.  
    2. with demo1 as(select '<hello-world>
    3. <word seq="1">Hello</word>
    4. <word seq="2">world</word>
    5. </hello-world>
    6. ':: xml AS XML)
    7. select(trim(replace(xpath('//word[@seq=1]/text()',T.XML):: text,',',''),'{}'):: xml):: text AS COL1
    8. , CASE(trim(replace(xpath('//word[@seq=1]/text()',T.XML):: text,',',''),'{}'):: xml):: text WHEN 'Hello' THEN 'Hell' ELSE 'END' END AS COL2
    9. from demo1 T;
    10.  

Get a free sample code of our Oracle to PostgreSQL conversion

Ispirer Toolkit automatically converts not only a single piece of code, but an entire database. Complex code will require customization of the toolkit

  • Explore how Ispirer Toolkit migrates the source code to the target technology without downloading it.
  • Analyze and compare the source sample with your code to understand which components of your application can be automatically converted using Ispirer Toolkit.
  • Run the database and insert the code to ensure it works properly.
  • Our experts can add new conversion rules within 3-5 business days.
Enter your name.

Enter a valid e-mail address.

Select your country.

Invalid input.

They succeeded using Ispirer Toolkit

Achieving 95% automation in PostgreSQL database migration

Oracle, SQL Server → PostgreSQL

Target: PostgreSQL

Achieving 95% automation in PostgreSQL database migration case card

Project Scope

1 700 000 LoC

Project Duration

12 Months

Industry

Contingent Workforce Management

Sybase ASE to MySQL: 100% automated migration

Sybase ASE → MySQL

Target: MySQL

Sybase ASE to MySQL: 100% automated migration case card

Project Scope

300 000 LoC

Project Duration

12 Months

Industry

Financial Data Utility Provider

Helping HR Software Leader: DB2 OS/390 to SQL Server

DB2 OS/390 → SQL Server

Target: SQL Server

Helping HR Software Leader case card

Project Scope

400 000 LoC

Project Duration

3 Months

Industry

Software Developer and Provider

Enhancing Performance: Oracle to Java Migration Automation

Oracle → Java, PostgreSQL

Target: Java, PostgreSQL

Enhancing Performance case card

Project Scope

1 250 000 LoC

Project Duration

14 months

Industry

Software Developer and Provider

Consulting Firm Cuts Migration Costs by 65% with Ispirer

SQL Server → Java, PostgreSQL

Target: Java, PostgreSQL

Consulting Firm Cuts Migration case card

Project Scope

35 000 LoC

Project Duration

3 Months

Industry

Financial Consulting Firm


Trust us with your migration project

  • High quality SQL code conversion

    Expert system with 20.000+ conversion rules and 100.000+ automated tests

  • Flexibility

    Nimble configuration with 300+ parameters and options for SQL objects and data multithread migration

  • Seasoned team

    Ensuring high security and performance standards is what we do best, thanks to our impressive expertise in building reliable and scalable solutions

  • Technology expertise

    With 25+ years of experience, our team has gained a wide pool of expertise in various programming languages, from the rarest to the most popular ones

  • We comply with ISO 27001

    security management requirements with comprehensive policies and processes, advanced security technology, and skilled professionals

  • Comprehensive migration analysis

    Intuitive and instructive reports for cost-effective post-migration polishing

  • Proprietary tools

    We employ Ispirer proprietary tools, underscoring our dedication to delivering the utmost reliability and performance solutions. The toolkit is compiled daily and continually integrates dozens of new conversion rules, enhancing the automation capabilities

  • Free smart assessment

    Ispirer's free Assessment tool for migration scope and complexity evaluation

They chose Ispirer to revamp their database

Mixon, Magnit, CardinalHealth, and more have adopted SQLWays to boost their innovation life-cycle accelerate and manage their end-to-end innovation lifecycle

Magnit logo
CardinalHealth logo
University of Maryland logo
WorldLine logo
Poul Group logo
Utah state university logo

Oracle to PostgreSQL MS SQL Server to PostgreSQL

Migration project

50%

Migration time reduction

1.365K

Lines of SQL code

8 Tb

of data

Talent Management

"Ispirer Toolkit enabled a seamless migration of 8 TB of data and 1.36M lines of code from Oracle and SQL Server to PostgreSQL. The automation features reduced migration time by 50%, cutting costs and minimizing manual effort. The quality, precision, and support exceeded our expectations."

SQL Server to PostgreSQL

Migration project

70%

Migration time reduction

650K+

Lines of SQL code

700+ tables

of data

Healthcare Solutions

"Ispirer helped us migrate 700+ tables and 650+ stored procedures from SQL Server to PostgreSQL, reducing development time by 60%-70%. The tool efficiently handled case-sensitive issues and frequent data changes. The excellent support made the process easy, fast, and effective."

COBOL to Java

Migration project

6-month

Migration time reduction

100K+

Lines of code

200+

COBOL programs

Education

"Ispirer Toolkit enabled us to efficiently convert 200 COBOL programs with over 100,000 lines of code to Java. The tool produced high-quality, maintainable code, allowing our team to focus on infrastructure rather than conversion. Ispirer’s support was exceptional, often resolving issues within one business day."

Oracle 19c to PostgreSQL

Migration project

65%

Migration time reduction

1.500K

Lines of code

8 TB

of data

Payments & Financial Services

"Ispirer Toolkit helped us migrate 1.5 million lines of complex Oracle code to PostgreSQL, overcoming unique challenges with expert support. Their team provided customized solutions for a smooth transition. This migration is a key step in our cloud strategy, and we highly recommend Ispirer's services."

Firebird to PostgreSQL

Migration project

55%

Migration time reduction

25K+

Lines of SQL code

> 150 tables

per database

Manufacturing & Fleet Management

"Ispirer's Toolkit enabled the efficient migration of 150 tables and 25,000 lines of code from Firebird to PostgreSQL. The tool saved us time and reduced risks, while the Ispirer team provided excellent support throughout. Highly recommended for similar database migration projects."

Informix to Oracle

Migration project

78%

Migration time reduction

200K+

Lines of code

12 TB

of data

Governmental

"Ispirer MnMTK was crucial to our successful database migration, converting 12 TB of data and 200,000 lines of SQL code. The tool outperformed other solutions, saving us countless hours. The support team was responsive and effective—money well spent."

Are you still here? And wow, that's quite a lot you had to scroll through! 😄

Сonsult with our expert to better organize for you migration flow

Take control of your database
migration now

Book a demo

Do it for 5 minutes

THIS SITE USES COOKIES: By continuing to browse this site, you give your consent for cookies to be used. For more details, please read our Privacy Policy and Cookies Policy.
I Got it