CodeGym /Cursos /SQL SELF /Comparación de PL/pgSQL con otros lenguajes de programaci...

Comparación de PL/pgSQL con otros lenguajes de programación procedural (PL/SQL, T-SQL)

SQL SELF
Nivel 49, Lección 2
Disponible

En el mundo de las bases de datos existen varios lenguajes que amplían las posibilidades del SQL clásico y permiten escribir lógica de negocio completa directamente dentro del SGBD. Cada uno está pensado para su propia plataforma, pero en general resuelven tareas similares: automatizar, simplificar y acelerar el trabajo con los datos. Entre estos lenguajes están PL/pgSQL para PostgreSQL, PL/SQL para Oracle y T-SQL para SQL Server. Cada uno tiene sus peculiaridades, ventajas y matices, de los que vamos a hablar ahora.

PL/pgSQL (Procedural Language/PostgreSQL Structured Query Language) es un lenguaje de programación procedural integrado en PostgreSQL. Su objetivo principal es ampliar la funcionalidad de SQL, dando a los desarrolladores la posibilidad de trabajar con variables, bucles, estructuras de control y bloques de manejo de errores. Esto convierte al lenguaje en una herramienta potente para implementar lógica de negocio compleja del lado de la base de datos.

PL/SQL (Procedural Language/SQL) es un lenguaje de programación procedural integrado en el SGBD Oracle. Ofrece posibilidades similares para el manejo de datos y la creación de procedimientos, funciones y paquetes. PL/SQL se considera un lenguaje muy maduro gracias a sus décadas de refinamiento y a su rica ecosistema de herramientas.

T-SQL (Transact-SQL) es un lenguaje desarrollado por Microsoft para trabajar con SQL Server. Es una extensión del SQL estándar que incluye soporte para variables, estructuras de control y otros elementos de programación procedural. T-SQL tiene sus propias peculiaridades en el manejo de transacciones, trabajo con cursores y manejo de JSON.

Similitudes entre PL/pgSQL, PL/SQL y T-SQL

A primera vista, los tres lenguajes parecen bastante parecidos. Y no es de extrañar, porque su objetivo es el mismo: ayudar al desarrollador a implementar la lógica de negocio dentro de la base de datos. Veamos las principales similitudes:

  1. Sintaxis de bloques

    Los tres lenguajes ofrecen un formato estructurado para escribir código procedural. Elementos principales:

    • Declaración de variables.
    • Bloque principal de ejecución (BEGIN ... END).
    • Soporte para manejo de excepciones.
  2. Variables

    Puedes declarar y usar variables en cualquiera de estos lenguajes. Ejemplo de declaración de variable en PL/pgSQL:

    DECLARE
        student_id INT;
    BEGIN
        student_id := 10;
    END;
    

    Lo mismo se puede hacer en PL/SQL y en T-SQL.

  3. Estructuras de control

    Todos los lenguajes soportan IF...THEN, CASE, LOOP, FOR, WHILE, lo que permite escribir algoritmos complejos.

  4. Funciones y procedimientos

    Posibilidad de crear y llamar funciones y procedimientos personalizados, que pueden devolver tanto valores individuales como tablas.

Diferencias entre PL/pgSQL, PL/SQL y T-SQL

Los desarrolladores a menudo se encuentran con situaciones en las que necesitan migrar de una base de datos a otra. En estos casos es importante conocer los matices de los lenguajes. Veamos las diferencias clave.

Declaración de variables

PL/pgSQL: las variables se declaran en el bloque DECLARE. Para asignar valores se usa :=.

DECLARE
    total_students INT;
BEGIN
    total_students := 5;
END;

PL/SQL: la declaración es similar a PL/pgSQL, pero el tipo de variable puede heredarse de una columna de tabla usando %TYPE.

DECLARE
    student_name students.name%TYPE;
BEGIN
    student_name := 'John';
END;

T-SQL: las variables se declaran con la palabra clave DECLARE, la asignación se hace con SET o SELECT.

DECLARE @total_students INT;
SET @total_students = 5;  -- o
SELECT @total_students = COUNT(*) FROM students;

Manejo de errores

PL/pgSQL: usa el bloque EXCEPTION para manejar errores. Por ejemplo:

BEGIN
    SELECT * INTO my_var FROM nonexistent_table;
EXCEPTION
    WHEN others THEN
        RAISE NOTICE '¡Ocurrió un error!';
END;

PL/SQL: también usa EXCEPTION, pero con una clasificación de errores más detallada.

BEGIN
    SELECT * INTO my_var FROM nonexistent_table;
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        DBMS_OUTPUT.PUT_LINE('¡No se encontraron datos!');
END;

T-SQL: usa las construcciones TRY...CATCH.

BEGIN TRY
    SELECT 1/0; -- Error de división por cero
END TRY
BEGIN CATCH
    PRINT '¡Ocurrió un error!';
END CATCH;

Trabajo con cursores

PL/pgSQL: los cursores son implícitos y se pueden usar en bucles.

FOR row IN SELECT * FROM students LOOP
    RAISE NOTICE 'Estudiante: %', row.name;
END LOOP;

PL/SQL: los cursores son estructuras declaradas explícitamente. Por ejemplo:

DECLARE
    CURSOR student_cursor IS SELECT * FROM students;
    student_row students%ROWTYPE;
BEGIN
    OPEN student_cursor;
    FETCH student_cursor INTO student_row;
    CLOSE student_cursor;
END;

T-SQL: los cursores se declaran con la palabra clave CURSOR.

DECLARE student_cursor CURSOR FOR SELECT name FROM students;
OPEN student_cursor;
FETCH NEXT FROM student_cursor;
CLOSE student_cursor;
DEALLOCATE student_cursor;

Trabajo con transacciones

PL/pgSQL: las transacciones se gestionan con los comandos BEGIN, COMMIT, ROLLBACK.

PL/SQL: las transacciones se gestionan de forma similar con COMMIT, ROLLBACK, con soporte para SAVEPOINT.

T-SQL: se añade soporte para BEGIN TRANSACTION para marcar el inicio de una transacción.

Soporte de JSON

PL/pgSQL: manejo potente de JSON a través de los tipos de datos JSON y JSONB. Ejemplo:

SELECT data->>'key' FROM json_table;

PL/SQL: el soporte de JSON llegó más tarde y es algo menos flexible.

T-SQL: manejo muy cómodo de JSON a través de las funciones JSON_QUERY, JSON_VALUE.

¿Cuándo usar PL/pgSQL, PL/SQL o T-SQL?

PL/pgSQL:

  • La elección obvia si tu base de datos es PostgreSQL.
  • Ideal para manejar grandes volúmenes de datos gracias al soporte de tipos potentes (JSONB, arrays).
  • Ecosistema abierto, flexibilidad.

PL/SQL:

  • La opción para productos Oracle.
  • Ecosistema rico para trabajar con datos (paquetes, procedimientos integrados).

T-SQL:

  • Se usa en Microsoft SQL Server.
  • Ideal para trabajar con aplicaciones Microsoft e integración en el stack de Microsoft Azure.

Ejemplo de la misma tarea en PL/pgSQL, PL/SQL y T-SQL

Tarea: contar el número de estudiantes y devolver el resultado

PL/pgSQL:

CREATE FUNCTION count_students() RETURNS INT AS $$
DECLARE
    total INT;
BEGIN
    SELECT COUNT(*) INTO total FROM students;
    RETURN total;
END;
$$ LANGUAGE plpgsql;

PL/SQL:

CREATE OR REPLACE FUNCTION count_students RETURN NUMBER IS
    total NUMBER;
BEGIN
    SELECT COUNT(*) INTO total FROM students;
    RETURN total;
END;

T-SQL:

CREATE FUNCTION count_students()
RETURNS INT
AS
BEGIN
    DECLARE @total INT;
    SELECT @total = COUNT(*) FROM students;
    RETURN @total;
END;

Ahora ya sabes la diferencia aproximada entre PL/pgSQL, PL/SQL y T-SQL. Cada lenguaje tiene sus peculiaridades y escenarios de uso que lo hacen único. La elección del lenguaje (y de la base de datos) siempre depende de tus necesidades y de la naturaleza del proyecto.

2
Tarea
SQL SELF, nivel 49, lección 2
Bloqueada
Creación de una función simple para contar filas
Creación de una función simple para contar filas
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION