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 EURE1;
SELECT arrodonir(SUM(IMPORT),2) FROM APUNTS WHERE CODI_EMPRESA=:CODI_EMPRESA AND EXERCICI=:EXERCICI AND haber=:compte INTO :HABER1;
if ((EURE<>: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)