Ir al contenido


Foto

Procedimiento Almacenado en PostgreSQL


  • Por favor identifícate para responder
6 respuestas en este tema

#1 JanoRod

JanoRod

    Newbie

  • Miembros
  • Pip
  • 4 mensajes
  • LocationPunta Arenas

Escrito 31 marzo 2010 - 11:54

Hola a todos. Quisiera consultarles si alguien sabe como ejecutar esta consulta con parametros en postgreSQL algo asi ....


sql
  1.   SELECT id_num,nombre FROM Tabla WHERE campo=:PARAMETRO



he realizado ingresos en la BD sin problemas este codigo estoy ocupando para agregar datos


sql
  1. CREATE OR REPLACE FUNCTION "public"."agregar" (
  2.   INTEGER,
  3.   VARCHAR
  4. )
  5. RETURNS "pg_catalog"."void" AS
  6. $body$
  7.     INSERT INTO TABLA (CAMPO1,CAMPO2) VALUES ($1,$2);
  8. $body$
  9. LANGUAGE 'sql'
  10. VOLATILE
  11. CALLED ON NULL INPUT
  12. SECURITY INVOKER
  13. COST 100;



Si alguien sabe algo se los agradecere... :smiley:





  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 02 abril 2010 - 08:03

Hola JanoRod y bienvenido al foro, ¿la consulta la quieres ejecutar desde Dephi?, ¿Desde un SP en Delphi?, ¿desde PosgresSQL?, En caso de usar Delphi, ¿qué componente utilizas?.

Saludos.
  • 0

#3 JanoRod

JanoRod

    Newbie

  • Miembros
  • Pip
  • 4 mensajes
  • LocationPunta Arenas

Escrito 02 abril 2010 - 12:31

Hola JanoRod y bienvenido al foro, ¿la consulta la quieres ejecutar desde Dephi?, ¿Desde un SP en Delphi?, ¿desde PosgresSQL?, En caso de usar Delphi, ¿qué componente utilizas?.

Saludos.

Hola enecumene..gracias muy bueno el foro estoy aprendido bastante...
Estoy trabajando con Delphi con componentes de Zeos..he intentado con llamar al SP con Zquery y ZStoredProc pero no logro entregarle el valor al SP mi codigo es algo asi



delphi
  1. ZQuery1.Params.ParamByName('pnum').Value :=edit1.Text ;
  2.         ZQuery1.Open ;
  3.  
  4.           if ZQuery1.Eof=true  then
  5.             begin
  6.                 showmessage ('registro no encontrado');
  7.             end
  8.               else
  9.             begin
  10.               showmessage ('el usuario registrado es ' ) ;
  11.             end;
  12.             ZQuery1.Close ;





  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 02 abril 2010 - 12:41

Hola, utiliza el componente ZStoredProc, en la propiedad StoredProcName selecciona el SP que utlizarás y desde código:



delphi
  1.         ZStoredProc1.ParamByName('pnum').Value := edit1.Text;
  2.         ZStoredProc1.ExecProc;
  3.  
  4.           if ZStoredProc1.RecordCount = 0 then
  5.             begin
  6.                 showmessage ('registro no encontrado');
  7.             end
  8.               else
  9.             begin
  10.               showmessage ('el usuario registrado es ' ) ;
  11.             end;
  12.             ZStoredProc1.Close;



Saludos.

  • 0

#5 JanoRod

JanoRod

    Newbie

  • Miembros
  • Pip
  • 4 mensajes
  • LocationPunta Arenas

Escrito 02 abril 2010 - 12:54

Hola, utiliza el componente ZStoredProc, en la propiedad StoredProcName selecciona el SP que utlizarás y desde código:



delphi
  1.         ZStoredProc1.ParamByName('pnum').Value := edit1.Text;
  2.         ZStoredProc1.ExecProc;
  3.  
  4.           if ZStoredProc1.RecordCount = 0 then
  5.             begin
  6.                 showmessage ('registro no encontrado');
  7.             end
  8.               else
  9.             begin
  10.               showmessage ('el usuario registrado es ' ) ;
  11.             end;
  12.             ZStoredProc1.Close;



Saludos.


Hola enecumene..gracias
Esta consulta la tengo en el Zquery y tambien he ocupando ZConnection pero no me despliega nada ...lo que pienso que a lo mejor en postgreSQL esta mal realizada mi consulta SQL te dejo el codigo que ocupo...y si me puedes corregir te lo agradeceria...vale y gracias.



sql
  1. SELECT nombre_SP (:parametro);



la consulta para llamar una cantidad N de registro lo consulto asi en postgreSQL :



sql
  1.  
  2. CREATE OR REPLACE FUNCTION "public"."nombre_SP" (
  3.   INTEGER
  4. )
  5. RETURNS SETOF record AS
  6. $body$
  7.   SELECT * FROM TABLA WHERE campo = $1;
  8. $body$
  9. LANGUAGE 'sql'
  10. VOLATILEhe re
  11. CALLED ON NULL INPUT
  12. SECURITY INVOKER
  13. COST 100 ROWS 1000;



ojala me puedas ayudar ....esto mismo lo he realizado en firebird de manera muy facil...pero en postgreSQL es mas complejo...

Salud OS  :smiley:

  • 0

#6 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 02 abril 2010 - 01:04

Dos cosas:

1. Insisto en usar ZStoredProc.
2. En la función no veo ningún parámetro de entrada (en este caso pnum).

Con el ZStoredProc te evitas de usar el select function. Ahora si quieres usar el Query pues veo algo que no cuadra, en la consulta colocas :Parametro en vez de :pnum prueba cambiando esos valores y me avisas.

Saludos.
  • 0

#7 JanoRod

JanoRod

    Newbie

  • Miembros
  • Pip
  • 4 mensajes
  • LocationPunta Arenas

Escrito 03 abril 2010 - 10:31

Dos cosas:

1. Insisto en usar ZStoredProc.
2. En la función no veo ningún parámetro de entrada (en este caso pnum).

Con el ZStoredProc te evitas de usar el select function. Ahora si quieres usar el Query pues veo algo que no cuadra, en la consulta colocas :Parametro en vez de :pnum prueba cambiando esos valores y me avisas.

Saludos.


Hola enucumene .....ahora arregle mi consulta en sql y funciona bien al llamarlo de postgresql pero al llamarlo de las 2 formas a traves de ztoredproc y Zquery no me arroja ningun valor buscado ...este codigo lo depure un poco mas ...es algo asi.:



sql
  1.   REATE OR REPLACE FUNCTION buscar(IN parametro INTEGER, OUT pnumero INTEGER, OUT pnombre CHARACTER VARYING)
  2.   RETURNS "record" AS
  3. $BODY$
  4. BEGIN
  5. SELECT INTO pnombre,pnumero
  6. nombre,numero
  7. FROM empleado WHERE numero=parametro;
  8. END;
  9. $BODY$
  10.   LANGUAGE 'plpgsql' VOLATILE;



ojala puedas revisarlo y decirme si estoy mal en mi consulta ....no conosco mucho el lenguaje de plpgsql ...lo comparo con sql pero difiere un poco.
Lo otro cual es la mejor forma de conectar con postgres algo mas nativo.....oledb o algun otro
Salud OS
  • 0




IP.Board spam blocked by CleanTalk.