Ver Mensaje Individual
  #3  
Antiguo 01-12-2005
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Reputación: 20
Ivanzinho Va por buen camino
Estuve haciendo pruebas y si le paso un valor funciona, pero con una variable no va. Seguro que hago algo mal
Probe tanto con
Código SQL [-]
DECLARE EXTERNAL FUNCTION I64TRUNCATE
    DOUBLE PRECISION BY DESCRIPTOR,
    DOUBLE PRECISION BY DESCRIPTOR
RETURNS PARAMETER 2
ENTRY_POINT 'fbtruncate' MODULE_NAME 'fbudf'
como con
Código SQL [-]
DECLARE EXTERNAL FUNCTION TRUNCATE
    INTEGER BY DESCRIPTOR,
    INTEGER BY DESCRIPTOR
RETURNS PARAMETER 2
ENTRY_POINT 'fbtruncate' MODULE_NAME 'fbudf'
El procedimiento es el siguiente
Código SQL [-]
CREATE PROCEDURE CANSEROFEGLOBAL (
    COF VARCHAR(9),
    CEN NUMERIC(15,2))
RETURNS (
    CANTIDAD NUMERIC(15,2))
AS
DECLARE VARIABLE DISPONIBLE NUMERIC(15,2); /* Cantidade dispoñible en almacén da liña de oferta */
DECLARE VARIABLE FAM VARCHAR(3); /* Familia da liña */
DECLARE VARIABLE SER VARCHAR(9); /* Codigo da liña */
DECLARE VARIABLE UNIDADESLIN INTEGER;
begin
  -- Igualamos a cantidad máxima a servir á cantidad total a servir
  Cantidad = cen;
  -- Recorremos todas as liñas da oferta para ver cál é a cantidade máxima
  -- que se pode servir
  for select fam_of, ser_of, Cen_of * Uen_of from mblinofertas
      where cod_of = :cof
      into :FAM, :SER, :UNIDADESLIN do
     begin
        select Exi_al - Cre_al from mbalmacen
        where fam_al = :FAM and num_al = :SER
        into ISPONIBLE;
        DISPONIBLE = truncate(DISPONIBLE/UNIDADESLIN);
        if (disponible < Cantidad) then
           Cantidad = disponible;
     end
  suspend;
end

Espero que puedan ayudarme. Muchas gracias
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita