No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

PLPGSQL: Stored procedures

13/34
Recursos

Aportes 22

Preguntas 2

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

  • Funciones 鈫 Son m谩s avanzadas. Regresan tipos de datos. Tienen m谩s flexibilidad. No son est谩ndar de SQL, se tiene que usar el lenguaje PLPGSQL.
  • Procedures 鈫 Integran l贸gica a la sentencias SQL. Se han ido incluyendo en el est谩ndar SQL. No regresan ning煤n valor.

Stored Procedure:

CREATE OR REPLACE PROCEDURE test_drpcreate_procedure()
LANGUAGE SQL
AS $$
	DROP TABLE IF EXISTS aaa;
	CREATE TABLE aaa (bbb char(5) CONSTRAINT firstkey PRIMARY KEY);
$$;
CALL test_drpcreate_procedure();

Function

CREATE OR REPLACE FUNCTION test_dropcreate_function()
RETURNS VOID
LANGUAGE plpgsql
AS $$
BEGIN
	DROP TABLE IF EXISTS aaa;
	CREATE TABLE aaa(bbb char(5) CONSTRAINT firstkey PRIMARY KEY, ccc char(5));
	DROP TABLE IF EXISTS aaab;
	CREATE TABLE aaab (bbba char(5) CONSTRAINT secondkey PRIMARY KEY,ccca char(5));
END
$$;
SELECT test_dropcreate_function();

PLPGSQL es un lenguaje ampliado derivado desde el SQL
pudiendo ejecutar codigo SQL estandar y funciones especificas de este lenguaje

Existen

  • Store procedures
    Integran l贸gica a la sentencias SQL. Se han ido incluyendo en el est谩ndar SQL. No regresan ning煤n valor.

  • Functions
    Son mas avanzadas estan hechas en el lenguaje de PLPGSQL, Regresan tipos de datos. Tienen m谩s flexibilidad. No son est谩ndar de SQL.

PLPGSQL: Stored procedures


PLPGSQL - Procedural Language PostgreSQL

Lenguaje que Postgres cre贸 para hacer programaci贸n m谩s ordenada y procedural y tiene un componente muy fuerte para hacer triggers y store procedures .

Un procedure o procedimiento:

  • es una serie de pasos (similar a una funci贸n)
  • Tienen la caracter铆stica de que NO regresa ning煤n valor.
  • Son parte de SQL Standard

PLPGSQL es un superset, lenguaje ampliado del Standard SQL , donde se pueden hacer todas las sentencias SQL normales o estandar, pero por encima de ello, tiene funciones muy espec铆ficas para hacer ciertas cosas, como las funciones, procedures o triggers.

Las funciones:

  • son mucho m谩s avanzadas
  • permiten m谩s flexibilidad
  • retornan tipos de datos
  • NO son est谩ndar, por lo que necesitaremos PLPGSQL.
-- PROCEDURE
create or replace PROCEDURE test_dropcreate_procedure()
LANGUAGE SQL
AS $$
    DROP TABLE if exists aaa;
    CREATE TABLE aaa(
        bbb varchar(5) CONSTRAINT first PRIMARY KEY;
    );
$$;

CALL test_dropcreate_procedure();
-- FUNCTION
CREATE OR REPLACE FUNCTION test_dropcreate_function()
RETURNS void -- Regresa un vac铆o, como un procedure
LANGUAGE plpgsql
AS $$ --necesitaremos begin y end siempre para hacer la funcion
    BEGIN
        DROP TABLE if exists aaa;
        CREATE TABLE aaa(bbb char(5) CONSTRAINT firstkey PRIMARY KEY, ccc char(5));
        DROP TABLE if exists aaab;
        CREATE TABLE aaab(bbba char(5) CONSTRAINT secondkey PRIMARY KEY, ccca char(5));
    END
$$;

SELECT test_dropcreate_function();

Las PRIMARY KEYS deben de ser 煤nicas en toda la DB.

No se si esta ser谩 una clase de transici贸n, pero esta clase es muy diferente de las otras de este profesor, se me hace que fue my r谩pido como si fuera un repaso de procedure y funciones en PLPGSQL

PROCEDURE

CREATE OR REPLACE PROCEDURE test_drpcreate_procedure()
LANGUAGE SQL
AS $$
	DROP TABLE IF EXISTS aaa;
	CREATE TABLE aaa (bbb char(5) CONSTRAINT firstkey PRIMARY KEY)
$$;

CALL test_drpcreate_procedure();

FUNCTION

CREATE OR REPLACE FUNCTION test_dropcreate_function()
RETURNS VOID
LANGUAGE plpgsql
AS $$
BEGIN
	DROP TABLE IF EXISTS aaa;
	CREATE TABLE aaa (bbb char(5) CONSTRAINT firstkey PRIMARY KEY, ccc char(5) );
	DROP TABLE IF EXISTS aaab;
	CREATE TABLE aaab (bbba char(5) CONSTRAINT secondkey PRIMARY KEY, ccca char(5) );
	
END
$$;

SELECT test_dropcreate_function();

13. PLPGSQL: Stored procedures

  • Postgres cre贸 para hacer m谩s estructurado y ordenado
  • Procedure: serie de pasos que no extrae ning煤n valor para regresar.
  • Las funciones hacen lo mismo que las procedure, pero s铆 retornan algo.
CREATE OR REPLACE PROCEDURE test_drpcreate_procedure()
LANGUAGE SQL
AS $$
	DROP TABLE IF EXISTS aaa;
	CREATE TABLE aaa (bbb char(5) CONSTRAINT firstkey PRIMARY KEY);

$$;

CALL test_drpcreate_procedure();

CREATE OR REPLACE FUNCTION test_dropcreate_function()
RETURNS VOID
LANGUAGE plpgsql
AS  $$
BEGIN
	DROP TABLE IF EXISTS aaa;
	CREATE TABLE aaa (bbb char(5) CONSTRAINT firstkey PRIMARY KEY, ccc char(5));
	DROP TABLE IF EXISTS aaab;
	CREATE TABLE aaab (bbba char(5) CONSTRAINT secondkey PRIMARY KEY, ccca char(5));
END

$$;

SELECT test_dropcreate_function();

Diferencias STORE PROCEDURE y FUNCTIONS STORE PROCEDURE: no regresan valor y hacen parte del est谩ndar SQL FUNCTIONS: regresan valores, son mas flexibles y son propias de PostgreSQL/PLPGSQL

Buen ejemplo, complementar con los triggers

Los nombres de los objetos son 煤nicos en el esquema de base de datos, por eso no se permite nombrar dos o mas con la misma descripci贸n.

驴Entonces para sentencias SELECT siempre hay que utilizar funciones debido a que estas me regresan valores?

create [or replace] procedure procedure_name(parameter_list)
language plpgsql
as $$
declare
鈥 variable declaration
begin
鈥 stored procedure body
end; $$

alguien tiene la base de datos del profesor o donde lo puedo conseguir?

Esta funcion crea una columna que convierte la columna timestamp de rentas en una columna de fecha: ```js CREATE OR REPLACE FUNCTION agregar_date() RETURNS VOID LANGUAGE plpgsql AS $$ BEGIN ALTER TABLE rentas ADD COLUMN IF NOT EXISTS renta_date DATE; UPDATE rentas SET renta_date = DATE(fecha_renta); END; $$; SELECT agregar_date() ```

PL/pgSQL se basa en el lenguaje PL/SQL de Oracle y se ha dise帽ado para tener una sintaxis similar, lo que permite a los desarrolladores que est谩n familiarizados con PL/SQL de Oracle trabajar f谩cilmente con PostgreSQL.

Lets pray for PALESTINE馃樁鈥嶐煂笍

Si en dado caso hacen una FUNCTION y la ejecutaron y luego haces un SELECT y funcion贸 como en el caso de la clase.
Y luego vuelven a modificar la FUNCTION sin ejecutar y hacen un SELECT NO se ver谩 reflejado el cambio hasta que vuelvas a ejecutar la FUNCTION con su nuevo comando o doncicion o nuevo c贸digo.

Me acaba de pasar y experiment茅 y no tuve que borrar manualmente la tabla 鈥渁aa鈥 como en el caso del video. 馃槂

Corriganme si me equivoqu茅 porfas!

Buenisimo el concejo de los procedimientos y las funcione, no lo enteni anteriormente鈥 se parece mucho a Pascal realmente

create or replace function moon()
returns void
language plpgsql
as $$
begin
drop table if exists moon1;
create table moon1
(moon1 char(5) constraint f_key primary key);
drop table if exists moon2;
create table moon2
(moon2 char(5) constraint f1_key primary key);
end
$$;

select moon();

buenard

Excelente, gracias