funciones en postgresql

765 views
Skip to first unread message

Juan Rojas C

unread,
Aug 13, 2009, 4:24:34 PM8/13/09
to mundovis...@googlegroups.com

Gracias por su atencion:

 Trabajo con vfp6 software original, y tengo la intecion de cambiarme a postgresql 8.3, algunas preguntas:

 - Como creo mis funciones con pgadmin III?

- Estas funciones donde se guardan?.

- Se pueden guardar estas funciones en alguna carpeta en especial?

- Como se invoca a la funcion creada en postgresql  bajo pgadmin III desde vfp6, si es que  estas funciones estan (si se permite) guardas en alguna carpeta en especial?:

ejemplo:

   base de datos:  inventario

   funcion          :  actualiza

- Como creo mis funciones, cuando no deseo crearlas por pgadmin, y como las guardo en alguna carpeta en especial sin usar pgadmin iii?

 

gracias

 

JRCORONADO.

 

 

 

Julio Cesar Rodriguez Dominguez

unread,
Aug 17, 2009, 11:19:05 AM8/17/09
to mundovis...@googlegroups.com
Mira las funciones las puedes escribir en cualquier editor de textos, yo personalmente utilizo notpad++ ( http://notepad-plus.sourceforge.net/es/site.htm ), para crearlas en PostgreSql, puedes utilizar el PGAdmin 3 o la consola intercativa del psql.
En PGAdmin 3, debes seleccionar primero tu base de datos donde vas a crear la función, luego dar click en el icono "Ejecución de consultas SQL" (ver imagen adjunta), copias tu función de donde este escrita y la pegas en esta nueva ventana que te abrio, le das en el menu Query y luego en Execute o simplemente (F5), con esto estaras ejecutando lo que copiaste, si tu función esta correcta, el resultado sera algo como "Query returned successfully with no result in 453 ms." en la parte de abajo de la ventana, llamada output pane.

Si no deseas crearla desde PGAdmin 3, entonces abres el psql, para iniciarla, debes irte a la ventana de comandos del ms-dos, entras a la carpeta donde tengas instaldo PostgreSql, debe verse algo como:

 C:\Archivos de programa\PostgreSQL\8.3\bin> _

en esta carpeta esta el ejecutable del psql, solo te resta entrar;

 C:\Archivos de programa\PostgreSQL\8.3\bin> psql -U tu_usuario tu_base_de_datos.

suponiendo que tu usuario es postgres y tu base se llama inventarios, quedaria así:

 C:\Archivos de programa\PostgreSQL\8.3\bin> psql -U postgres inventarios

ahora te pedira la contraseña del usuario, con esto ya estaras logeado a cliente de postgres llamado psql, donde puedes hacer consultas, ejecutar funciones, crear funciones y todo el SQL que quieras, recordando que estas conectado a tu base de datos de inventarios

Te recomiendo que leas este artículos sobre la estructura y creación de las funciones: http://www.postgresql-es.org/node/297

Las funciones al momento de ejecutarlas ya sea en la terminal del psql o el ejecutar de consultas de PGAdmin3, se estan guardando dentro del tu base de datos, no podras verlas en ninguna carpeta, pero si quieres llevar un control por separado, lo que puedes hacer es que a cada función que crees dentro de la base, tu puedes guardar una copia dentro de tu proyecto de VFP, creandole su propia carpeta.

He tenido mucho trabajo [ Laboral y de la Iglesia :-) ], disculpa por no poderte contestar antes. En lo que pueda seguire ayudandote.

Saludos amigo.


Julio Cesar Rodriguez Dominguez

unread,
Aug 17, 2009, 11:20:15 AM8/17/09
to mundovis...@googlegroups.com
....  ja! me falto adjuntar la imagen, ahi te va.
sql.queries.JPG

Juan Rojas C

unread,
Aug 17, 2009, 12:29:49 PM8/17/09
to mundovis...@googlegroups.com
Que te voy a disculpar, mas bien tengo mucho que agradecerte.
Te comentare estuve probando crear funciones, ya tengo mucho mas claro, el pgadmin iii, para diseñar funciones.
entre otras cosas, por experiencia se que no debo de poner en mayusculas el nombre de la funcion.
he leido tambien que los argunentos no deben de pasar de 16, que psaria si son mas de 16 argumentos?.
 
GRACIAS
 
JRCORONADO.

Julio Cesar Rodriguez Dominguez

unread,
Aug 17, 2009, 12:45:08 PM8/17/09
to mundovis...@googlegroups.com


El 17 de agosto de 2009 11:29, Juan Rojas C <jrsi...@gmail.com> escribió:
Que te voy a disculpar, mas bien tengo mucho que agradecerte.
Te comentare estuve probando crear funciones, ya tengo mucho mas claro, el pgadmin iii, para diseñar funciones.
entre otras cosas, por experiencia se que no debo de poner en mayusculas el nombre de la funcion.
he leido tambien que los argunentos no deben de pasar de 16, que psaria si son mas de 16 argumentos?.

Dónde leiste eso?, es un mentira. es posible pasar muchos, mucho parametros incluso no se si exista un limite, ejemplo:

CREATE OR REPLACE FUNCTION test_function(val1 int, val2 int, val3 int, val4 int, val5 int, val6 int, val7 int, val8 int, val9 int, val10 int, val11 int, val12 int,
val13 int, val14 int, val15 int, val16 int, val17 int, val18 int, val19 int, val20 int, val21 int, val22 int, val23 int, val24 int, val25 int, val26 int, val27 int,
val28 int, val29 int, val30 int) RETURNS integer AS
$BODY$
declare
   
begin
    raise notice '% % % % % % % % % % % % % % % % % % % % % % % % % % % % % %',val1, val2, val3, val4, val5, val6, val7, val8,
        val9, val10, val11, val12, val13, val14, val15, val16, val17, val18, val19, val20, val21,
        val22, val23, val24, val25, val26, val27, val28, val29, val30;
   
    return -1;
end;
$BODY$
  LANGUAGE 'plpgsql';

Prueba de la función:

postgres@test[localhost]=# select test_function(10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160, 170,180,190,200,210,220,230,240,250,260,270,280,290,300);

NOTICE:  10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270
280 290 300

 test_function
---------------
            -1
(1 fila)

Fueron 30 parametros aca, aunque no se por que tendrias la necesidad de pasar tantos parametros, yo a lo mucho he usado unos 8 aprox., si tienes que pasar mucho, puedes hacer uso de los arreglos, agrupando tus parametros por tipo de dato.

Saludos.

Juan Rojas C

unread,
Aug 17, 2009, 2:06:22 PM8/17/09
to mundovis...@googlegroups.com
gracias Julio, voy avanzando, si tengo dudas molesto en el foro.ah, me olvidaba, como invoco a una triggers desde vfp6?, invoco al nombre de la funcion o al nombre del trigger?
 
GRACIAS
JRCORONADO

Julio Cesar Rodriguez Dominguez

unread,
Aug 17, 2009, 2:16:16 PM8/17/09
to mundovis...@googlegroups.com


El 17 de agosto de 2009 13:06, Juan Rojas C <jrsi...@gmail.com> escribió:
gracias Julio, voy avanzando, si tengo dudas molesto en el foro.ah, me olvidaba, como invoco a una triggers desde vfp6?, invoco al nombre de la funcion o al nombre del trigger?
 

El nombre de la función.

El trigger (disparador que también es una función) se manda a llamar solita con la llamada a la función que la invoca, esa es su finalidad. El tiempo de la llamada depende de como este declarada, si antes o despues de la llamada a la función, esto ya no le incumbe a VFP:

Deberias leerte toda esta sección ( o todo completo ;-) ) del manual oficial de PostgreSql: http://www.postgresql.org/docs/8.4/interactive/plpgsql.html
la subsección de trigger especialmente para esta pregunta: http://www.postgresql.org/docs/8.4/interactive/plpgsql-trigger.html

Saludos


Juan Rojas C

unread,
Aug 17, 2009, 4:38:08 PM8/17/09
to mundovis...@googlegroups.com
GRACIAS JULIO
 
JRCORONADO

Reply all
Reply to author
Forward
0 new messages