Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-12-2004
Gabriel2 Gabriel2 is offline
Miembro
 
Registrado: sep 2004
Posts: 108
Poder: 20
Gabriel2 Va por buen camino
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...
Responder Con Cita
  #2  
Antiguo 26-12-2004
celades celades is offline
No confirmado
 
Registrado: may 2003
Ubicación: Torroella de Montgrí (Girona)
Posts: 42
Poder: 0
celades Va por buen camino
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;
  /* Procedure body */
  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)
Responder Con Cita
  #3  
Antiguo 30-12-2004
Gabriel2 Gabriel2 is offline
Miembro
 
Registrado: sep 2004
Posts: 108
Poder: 20
Gabriel2 Va por buen camino
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?
Responder Con Cita
  #4  
Antiguo 31-12-2004
celades celades is offline
No confirmado
 
Registrado: may 2003
Ubicación: Torroella de Montgrí (Girona)
Posts: 42
Poder: 0
celades Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:28:36.


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
Copyright 1996-2007 Club Delphi