Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Cómo creo un Procedimiento almacenado? (https://www.clubdelphi.com/foros/showthread.php?t=17137)

Gabriel2 24-12-2004 22:04:50

Cómo creo un Procedimiento almacenado?
 
Hola y Felices Fiestas!!!
Necesitaria que alguien me diera una manito con un ejemplo de como creo un procedimiento almacenado y como lo utilizo desde mi aplicación. Utilizo InterBase 6.5 e IBExpert... de antemano gracias por la ayuda...

celades 26-12-2004 11:46:49

Hola

Desde Interbase,Firebird con Ibexepres,Ibconsole etc

Código SQL [-]
CREATE PROCEDURE BISIESTO (
    ANYS SMALLINT)
RETURNS (
    SINO SMALLINT)
AS
DECLARE VARIABLE VALOR1 SMALLINT;
DECLARE VARIABLE VALOR2 SMALLINT;
DECLARE VARIABLE VALOR3 SMALLINT;
begin
sino=0;
SELECT SINO FROM ES_DIVISIBLE(:anys,4) INTO :VALOR1;
SELECT SINO FROM ES_DIVISIBLE(:anys,100) INTO :VALOR2;
SELECT SINO FROM ES_DIVISIBLE(:anys,400) INTO :VALOR3;
if ((:VALOR1=1) and ((:VALOR2=0) or (:VALOR3=1))) then sino=1;

suspend;
end

donde es_divisible es otro procedure

para ejecutarlo desde Delphi con un componente ibquery,fibquery,query,
storedproc etc

Código SQL [-]
select sino from bisiesto(2004)

Código SQL [-]
execute procedure bisiesto(2004) returning_values :valor

si es un procedure que no devuelve nada solo ejecuta o sea no tiene suspend

Código SQL [-]
CREATE PROCEDURE AJUSTAR_COMPTES (
    CODI_EMPRESA VARCHAR(10),
    EXERCICI INTEGER)
AS
DECLARE VARIABLE HABER NUMERIC(15,2);
DECLARE VARIABLE DEURE NUMERIC(15,2);
DECLARE VARIABLE HABER1 NUMERIC(15,2);
DECLARE VARIABLE DEURE1 NUMERIC(15,2);
DECLARE VARIABLE COMPTE VARCHAR(15);
BEGIN
for select codi,deure_inicial,haber_inicial from comptes WHERE CODI_EMPRESA=:CODI_EMPRESA AND EXERCICI=:EXERCICI order by codi into :compte,:deure,:haber do
BEGIN
  SELECT arrodonir(SUM(IMPORT),2)  FROM APUNTS WHERE CODI_EMPRESA=:CODI_EMPRESA AND EXERCICI=:EXERCICI AND deure=:compte INTO :DEURE1;
  SELECT arrodonir(SUM(IMPORT),2)  FROM APUNTS WHERE CODI_EMPRESA=:CODI_EMPRESA AND EXERCICI=:EXERCICI AND haber=:compte INTO :HABER1;
  /* Procedure body */
  if ((:DEURE<>:deure1) or (:haber<>:haber1)) then
  update comptes set deure_inicial=:deure1,haber_inicial=:haber1  WHERE CODI_EMPRESA=:CODI_EMPRESA AND EXERCICI=:EXERCICI AND codi=:compte;
END
END

solo se puede ejecutar

Código SQL [-]
execute procedure AJUSTAR_COMPTES('1',2004)

Gabriel2 30-12-2004 21:52:28

Gracias por la ayuda.
Para llamar al procedimiento desde la aplicación utilice un IBQuery.
Código:


select * from RESAJUSTES (:Numero)

Donde :Numero es el parámetro de entrada. Ahora me pregunto como será
si utilizara dos o más parámetros de entrada?

celades 31-12-2004 09:02:43

Hola

Código:
Código SQL [-]
select * from RESAJUSTES (:Numero,:usuario)

ibquery1.parambyname('numero').asinteger:=1;
ibquery1.parambyname('usuario').asstring:='Pepito';

o bien
Código:
Código SQL [-]
ibquery1.sql.text:='select * from RESAJUSTES ('+inttostr(Numero)+','+quotedstr(usuario)+')';

donde numero es una varible de tipo integer y usuario es una variable tipo string, (la funcion quotedstr lo que hace es poner comillas delante y detras y si conviene en medio de la variable tipo string)

Saludos


La franja horaria es GMT +2. Ahora son las 17:10:00.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi