PASAR UN ARRAY COMO PARAMETRO A UNA FUNCION DE POSTGRESQL (PARTE UNO)

Hola a todos, les traigo un nuevo problema que tuve con una function en postgresql.
Basicamente lo que necesitaba era enviar como parametro de una function un array para posteriormente usarlo.
El array se puede pasar como parametro de dos maneras, la primera escribiendo el nombre del array el tipo dato que contendra el array puede ser integer,varchar,text, etc y seguido por dos corchetes.

CREATE OR REPLACE FUNCTION esquema.f_datosarray(nombre text[]) RETURNS void AS

Para usar el array simplemente accedemos con el nombre del array y entre corchetes escribimos la posicion, cabe aclarar que hasta donde e revisado el array siempre comienza en uno, en caso de estar equivocado por favor me lo hacen saber.

nombre[1]

Aqui un ejemplo mas completo para que se entienda mejor.

CREATE OR REPLACE FUNCTION esquema.f_datosarray(nombre text[]) RETURNS character varying AS
$BODY$
         DECLARE
         dato character varying;
         BEGIN
                --obtenemos el dato en la posicion cinco
                dato := nombre[5];
                return dato;
         END;
$BODY$

Para llamar la funcion seria de la siguiente manera:

SELECT esquema.f_datosarray('{''manzana'',''pera'',''uva'',''banana'',''naranja'',''fresa'',''durazno''}');

como resultado mostrara : naranja.

Si el array es de tipo integer seria de la siguiente manera:

SELECT esquema.f_datosarray('{1,2,34,5,6,7}');

Ahora si lo que queremos en pasar un array bidemensional es decir array[][] seria casi de la misma forma, agregando adicionalmente un for o un while para poder recorrer el array.

CREATE OR REPLACE FUNCTION esquema.f_datosarray(nombre text[][]) RETURNS character varying AS
$BODY$
         DECLARE
         dato character varying;
         cantidadfilas integer:=array_length(nombre,1); --obtenemos el numero de filas del array
         BEGIN
                --obtenemos el dato del primer array en la posicion 3
                IF(cantidadfilas > 0)THEN--verificamos si hay algun dato
                     FOR i IN 1..cantidadfilas LOOP
                            dato := nombre[i][3];--se obtendra el dato de la ultima fila en la posicion 3
                     END LOOP;
                 END IF;
                return dato;
         END;
$BODY$

Para llamar la funcion seria de la siguiente manera:

SELECT esquema.f_datosarray('{{''manzana'',''pera'',''uva''},{''manzana'',''pera'',''uva''},{''manzana'',''pera'',''uva''},{''manzana'',''pera'',''uva''}}');

Por el momento es todo, espero que le sirva de algo, si tengo algun error por favor me avisan . Proximamente seguire con el mismo tema pero ahora pasando un array con varios tipos de datos, y despues mediante la function cast cambiar al tipo de dato que se necesite. No se olviden de comentar si les sirvio o si tienen alguna pregunta


Comentarios

  1. Estuvo excelente. Me sirvió en el trabajo. Muchas gracias.

    ResponderBorrar
  2. ¿Borraste mi pregunta?.
    Solo pregunté qué diferencia hay entre retornar un "dato" o un registro completo, que es lo que no estoy pudiendo hacer, no creo que sea como para eliminar un comentario.
    Saludos.

    ResponderBorrar

Publicar un comentario

Entradas más populares de este blog

USO DE DBLINK EN FUNCIONES DE POSTGRESQL(PARTE UNO)

Codeigniter solucion de :A PHP Error was encountered