PROCEDIMIENTO DE CREACIÓN Hasta ahora, ha aprendido a definir funciones definidas por el usuario utilizando la declaración de función de creación.
Un inconveniente de las funciones definidas por el usuario es que no pueden ejecutar transacciones. En otras palabras, dentro de una función definida por el usuario, no puede iniciar una transacción y confirmarla o revertirla. PostgreSQL 11 introdujo procedimientos almacenados que admiten transacciones. Para definir un nuevo procedimiento almacenado, utilice la declaración de procedimiento de creación.
A continuación se ilustra la sintaxis básica de la declaración de procedimiento de creación:
Syntax: create [or replace] procedure procedure_name(parameter_list) language plpgsql as $$ declare -- variable declaration begin -- stored procedure body end; $$
Analicemos la sintaxis anterior:
- crear procedimiento
- plpgsql
Los parámetros en los procedimientos almacenados pueden tener los modos in y inout . No pueden tener el modo de salida. Un procedimiento almacenado no devuelve un valor. No puede usar la declaración de devolución con un valor dentro de un procedimiento de almacenamiento como este:
return expression;
expresión de retorno
return;
Ejemplo:
cuentas
drop table if exists accounts; create table accounts ( id int generated by default as identity, name varchar(100) not null, balance dec(15, 2) not null, primary key(id) ); insert into accounts(name, balance) values('Raju', 10000); insert into accounts(name, balance) values('Nikhil', 10000);
select * from accounts;
Eso representa el resultado como se muestra a continuación:
transferir
create or replace procedure transfer( sender int, receiver int, amount dec ) language plpgsql as $$ begin -- subtracting the amount from the sender's account update accounts set balance = balance - amount where id = sender; -- adding the amount to the receiver's account update accounts set balance = balance + amount where id = receiver; commit; end;$$
Llamar a un procedimiento almacenado
LLAMAR
call stored_procedure_name(argument_list);
Ejemplo:
La siguiente transferencia $1, 000
call transfer(1, 2, 1000);
cuentas
SELECT * FROM accounts;
Producción:
Publicación traducida automáticamente
Artículo escrito por RajuKumar19 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA