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 04-11-2005
Jalisia Jalisia is offline
Registrado
 
Registrado: nov 2005
Posts: 1
Poder: 0
Jalisia Va por buen camino
Question Función en Procedimientos Almacenados

Hola.
Me estoy iniciando con los Procedimientos Almacenados y quisiera saber si existe alguna función que se pueda ejecutar dentro del procedimiento que me devuelva un string con la última sentencia sql ejecutada. Por ejemplo:

Ejecutar el procedimiento
EXECUTE PROCEDURE P_ART_MOD_MARGEN(10, 1);

CREATE PROCEDURE P_ART_MOD_MARGEN
(MARGEN Numeric(9,4), SEC_ID Integer)
AS
DECLARE VARIABLE SQL VARCHAR(1000);
begin
UPDATE ARTICULO
SET MARGEN = :MARGEN
WHERE IDSECCION = :SEC_ID;

SQL = <función que devuelva el siguiente string
"UPDATE ARTICULO SET MARGEN = 10 WHERE IDSECCION = 1">

.......................
.......................
end

Se que puedo hacerlo sustituyendo la parte en negrita por:
SQL = 'UPDATE ARTICULO SET MARGEN = ' || MARGEN
|| ' WHERE IDSECCION = ' || SEC_ID;

, pero es un rollo tener que volver a escribir la sentencia sql y eso que esta es pequeña.

Espero haberme explicado bien.

Un saludo, y gracias.
Responder Con Cita
  #2  
Antiguo 04-11-2005
apaucar apaucar is offline
Registrado
 
Registrado: sep 2003
Posts: 2
Poder: 0
apaucar Va por buen camino
procedimientos almacenados

Hola yo lo haria por medio de programacion sql con condicionales y estableciendo en una variable la posible cadena que esta ejecutandose, eso lo he hecho en el trabajo y me resulto, para hacer algo asi como quiebres ahi te evio un ejemplo
Código SQL [-]
 CREATE PROCEDURE ValidaUsuario 
     @codi_em_barras char(10), @codi_emp int, @codempresa char(2), @cod_comedor char(10), 
     @codig_user char(10), @tipo_comida char(50), @SALIDA CHAR(100) out, @CODBARR CHAR(100) out, 
     @CODIGO int out, @NOMBRES CHAR(200) out as 
 
  declare @est_empl char(2) 
 
  select @est_empl = ""
 
 
 
  declare @codclub char(3) 
  select @codclub = ''
 
  declare @codfil char(10)
 
 
  declare @codig_comensal int 
  select @codig_comensal = 0
  
  select convert(char(25),getdate(),113)
 
  select @codig_comensal=RH_EMPLEADO.CODIGO,@CODIGO= RH_EMPLEADO.CODIGO, 
  @CODBARR=RH_EMPLEADO.cod_barras, @nombres= RH_EMPLEADO.NOMBRE+' '+ RH_EMPLEADO.APELLIDO , 
  @est_empl = RH_NACIONALES.COD_ESTADO_EMP, @codfil = rh_empleado.cod_filial
 
  from 
     RH_EMPLEADO, RH_NACIONALES
   WHERE 
   (RH_EMPLEADO.COD_BARRAS= @codi_em_barras or RH_EMPLEADO.CODIGO=@codi_emp)
   and (RH_EMPLEADO.CODIGO=RH_NACIONALES.CODIGO)
   AND (RH_EMPLEADO.COD_EMPRESA=@codempresa)
 
 
  select convert(char(25),getdate(),113)
  select @codig_comensal
  select @est_empl
 
  if @codig_comensal<>null
   begin
     if @est_empl<>'1'
      begin
       select @salida= "No esta activo el empleado"   
      end
     else
 
      begin       
 
        select convert(char(25),getdate(),113)        
 
 if NOT exists(SELECT COD_CLUB FROM ROL_CLUB_EMPL WHERE COD_EMPRESA=@codempresa AND CODIGO=@codig_comensal AND COD_CLUB=@cod_comedor)
         begin
          select @salida= "Empleado no esta asignado con este proveedor"  
         end        
        else
         begin
           declare @cod_comi char(20)
           select convert(char(25),getdate(),113)
           SELECT @cod_comi = COD_COMIDA 
           FROM CC_COMIDA WHERE COD_EMPRESA = @codempresa  and COD_FILIAL=@codfil and tipo_comida =@tipo_comida
 
           select convert(char(25),getdate(),113)
 
           if @cod_comi=NULL
            begin
              select @salida="No tiene asignado ninguna comida"
            end
           else
            begin 
 
             declare @temp int
             select "menor tiempo", convert(char(25),getdate(),113)
             Select @temp=codigo from CC_EMPL_COMIDA (INDEX = index_1)
             WHERE COD_EMPRESA = @codempresa AND COD_COMIDA = @cod_comi
             and codigo= @codig_comensal AND 
             DATEPART(YY, FECHA_REGISTRO) = DATEPART(YY, GETDATE()) and 
             DATEPART(MM, FECHA_REGISTRO) = DATEPART(MM, GETDATE()) and 
             DATEPART(DD, FECHA_REGISTRO) = DATEPART(DD, GETDATE()) 
             /* ORDER BY FECHA_REGISTRO DESC     */          
             select @temp
             select "mayor tiempo", convert(char(25),getdate(),113)
             if @temp=NULL
               begin
 insert into cc_empl_comida(COD_EMPRESA,COD_PROV_COMIDA,COD_COMIDA,CODIGO,FECHA_REGISTRO,MODO_INGRESO,COD_USUARIO  ,FECSYS)
                values (@codempresa, @cod_comedor, @cod_comi ,@codig_comensal, GETDATE(),'BARR',@codig_user,GETDATE())
                select @salida='Empleado se registro satisfactoriamente' 
               end
              else
               begin
                 select @salida='Empleado ya registrado una vez' 
               end 
              select convert(char(25),getdate(),113)
            end
         end  
      end
   end
  else
   begin
     select @salida= "Codigo de empleado no existe"
   end
 GO
Espero te sirva chao

Última edición por marcoszorrilla fecha: 04-11-2005 a las 15:23:13.
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:46:30.


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