La sintaxis para crear funciones en PostgreSql es:
[sql]
CREATE OR REPLACE FUNCTION
functionName(parameter1 type1, parameter2 type2, … parameterN typeN)
RETURNS
returnType
AS
$$
BEGIN
# Code Here
END;
$$
LANGUAGE
plpgsql;
[/sql]
Donde:
functionName es el nombre de la función.
parameter1 a parameterN es el nombre del parámetro.
type1 a typeN es el tipo de dato del parámetro.
returnType es el tipo de dato que regresa la función.
$$ son delimitadores, el código tiene que ir encerrado en estos caracteres.
BEGIN y END inician y terminan el bloque de código de la función.
LANGUAGE plpgsql indica que el lenguaje utilizado es Procedure Language, de PostgreSql.
El lenguaje puede ser SQL también. Si este es el caso, cambia la forma de utilizar los parámetros.
Comencemos creando una función que regrese un entero con la fecha en formato Unix Time, sin parámetros.
[sql]
CREATE OR REPLACE FUNCTION
unixtime()
RETURNS
integer
AS
$$
BEGIN
RETURN
EXTRACT(
epoch FROM now() AT TIME ZONE ‘utc’
)::int;
END;
$$
LANGUAGE
plpgsql;
[/sql]
Donde:
unixtime es el nombre de la función.
No tenemos parámetros.
integer es el tipo de dato que regresa la función.
Segundo ejemplo, la misma función que con un parámetro en el que podamos establecer una fecha particular, y en caso de que no la establezcamos, nos devuelva el unixtime para la fecha actual:
[sql]
CREATE OR REPLACE FUNCTION
unixtime(p_date timestamp DEFAULT now())
RETURNS
integer
AS
$$
BEGIN
RETURN
EXTRACT(
epoch FROM p_date AT TIME ZONE ‘utc’
)::int;
END;
$$
LANGUAGE
plpgsql;
[/sql]
Como podemos ver, el parámetro es “p_date” y en caso de que no exista, tomamos el la fecha actual con “now()”. Se utilizaría de esta forma:
[sql]
— El unixtime, con fecha preestablecida y sin ella
SELECT unixtime(‘2016-01-01 14:01:01’), unixtime();
[/sql]
Excelente! Ahora vamos a crear una función para devolver una cadena encriptada con el algoritmo SHA1.
**Nota**Si no tienes instalado el módulo pgcrypt, instalalo con el comando:
[sql]
CREATE EXTENSION pgcrypto;
[/sql]
Ahora codificamos la función:
[sql]
CREATE OR REPLACE FUNCTION
sha1(bytea)
RETURNS
text
AS
$$
SELECT encode(digest($1, ‘sha1’), ‘hex’)
$$
LANGUAGE
SQL STRICT IMMUTABLE;
[/sql]
El lenguaje es SQL, STRICT es para que regrese null si el argumento es null e IMMUTABLE para indicarle que no accederá a datos, que solo utilizará los parámetros datos.
Como podemos observar, el parámetro utilizado no tiene nombre, solo el tipo, y lo utilizamos con denotación ordinal $1, es decir el primer argumento.
admin
March 12, 2016
Bases de datos, Postgresql
No Comment