Converting Oracle PL/SQL to PostgreSQL PL/pgSQL

Bitnine Global
Bitnine Global
Published in
4 min readApr 16, 2024

Welcome to the world of database programming, where the languages of Oracle’s PL/SQL and PostgreSQL’s PL/pgSQL help bring structure and logic to data. These procedural languages are the backbone of implementing business rules and data manipulation within databases, playing a critical role in database administration.

Both languages offer the ability to use variables, control statements such as IF, CASE, and LOOP, and to manage exceptions — tools necessary for responsive and dynamic database procedures. Whether you’re creating new functions or executing complex procedures, the CREATE PROCEDURE and CREATE FUNCTION syntax will become part of your standard toolkit.

As we dive into the conversion from Oracle PL/SQL to PostgreSQL PL/pgSQL, let’s unpack the essentials you’ll need to transition smoothly.

1. Basic Structure : The Building Blocks of Code

Every piece of code in PL/SQL and PL/pgSQL is built on a foundation known as the block structure, composed of DECLARE, BEGIN, and EXCEPTION sections.

Here’s how they translate:

2. Declaration

In the realm of procedures, functions, or any code block, declarations are where we set the scene for the variables or constants we plan to use

3. Execution : Bringing Code to Life

Between the BEGIN and END keywords lies the core of our script.

It’s where logic turns into action, where the sequence of statements executes sequentially, making your database come alive.

4. Deep Dive into Cursors

Cursors are tools that allow you to fetch and process rows returned by a query. Oracle PL/SQL and PostgreSQL PL/pgSQL both support cursors, but there are differences in syntax and functionality that one must be aware of during conversion.

Source: https://docs.aws.amazon.com/dms/latest/oracle-to-aurora-postgresql-migration-playbook/chap-oracle-aurora-pg.sql.cursors.html

Looping Constructs

1. Oracle PL/SQL

LOOP: Standard looping construct

EXIT: Keyword to terminate the loop prematurely

Example:

LOOP

— Code to execute in each iteration

EXIT WHEN some_condition;

END LOOP;

2. PostgreSQL PL/pgSQL

FOR loop: Standard loop using a loop counter and optional loop condition.

EXIT: Keyword to exit the loop.

RETURN: Keyword to exit the function containing the loop (if applicable).

Example:

FOR i IN 1 .. 10 LOOP

— Code to execute in each iteration

EXIT WHEN i > 5;

END LOOP;

Conditional Statements:

Both share similar syntax for IF, ELSE IF, and ELSE statements.

Minor difference: Oracle PL/SQL uses WHEN clause within a CASE statement, while PostgreSQL PL/pgSQL uses CASE WHEN directly.

Example (Oracle PL/SQL):

CASE WHEN grade >= 90 THEN ‘A’

WHEN grade >= 80 THEN ‘B’

ELSE ‘C’

END CASE;

Example (PostgreSQL PL/pgSQL):

CASE WHEN grade >= 90 THEN ‘A’

WHEN grade >= 80 THEN ‘B’

ELSE ‘C’

END CASE;

Additional Points

Oracle PL/SQL offers LOOP … END LOOP construct for indefinite loops. PostgreSQL PL/pgSQL relies on standard FOR loops with explicit conditions.

Oracle PL/SQL’s EXIT statement can have optional labels to target specific loops within nested loops. PostgreSQL PL/pgSQL’s EXIT works within the current loop context.

Remember, while the core functionalities are similar, these syntactic variations can impact code readability and maintainability when switching between the two languages.

In Conclusion: Embracing Change for Growth

The transition from Oracle PL/SQL to PostgreSQL PL/pgSQL is not just about swapping syntax — it’s about embracing a platform that offers versatility, stability, and an open-source community that’s constantly innovating. As you undertake this journey, remember that with every line of code converted, you’re paving the way for a more streamlined, efficient, and powerful database environment.

Are you ready to make the leap and transform your database management system?

Let this guide be the first step toward a future where your databases are not just functional — they’re strategic assets driving your business forward.

--

--

Bitnine Global
Bitnine Global

Database Management Solution Provider Relational DB + Graph DB / Graph Data Modelling + Analysis + Visualization Visit Us: https://www.bitnineglobal.com