Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-10-2019
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 523
Poder: 21
IVAND Va por buen camino
Select con funcion IN como parametro

Hola a todos
Tengo una duda con la funcion In ,
Este es mi SP
Variable definica en el store procedure
Código:
    KEY_FLUJO integer,
    NOMBRE_CUENTA varchar(200),
    CUENTA varchar(50),
    MONTO numeric(15,2),
    LISTA varchar(100),
Código:
FOR select x.key_flujo, 
x.nombre_cuenta, 
X.cuenta,
x.cuentas_afectan
Esta es la cadena que contiene los valores (58,533,23,419,492,29,544,536,576,577,283,284)
Código:
 from flujo_efectivo x  into :key_flujo,:nombre_cuenta,:cuenta,:lista Do
 Begin
  select sum(d.debe-d.haber)
    from cab_diario c ,det_diario d
    where c.key_cab_diario=d.key_cab_diario
    and c.estado='T'
    and extract(year from c.fecha_diario)=:anio
    and d.key_plan_ctas in into :monto ;
sale obvio error de convertir a string, por el parametro que se pasa al IN , alguien de ustedes ha tenido esta duda y como lo ha podido solucionar desde un store procedure

Probe tambien remplazado la variable :lista por este select y no arroja valor alguno
Código SQL [-]
select sum(debe-haber)
from cab_diario c,det_diario d
where c.key_cab_diario = d.key_cab_diario
and c.estado='T'
and extract(year from c.fecha_diario)=2018
and d.key_plan_ctas in (select list(tx.cuentas_afectan) from flujo_efectivo tx where tx.key_flujo=172)
si funciona logicamente si hago esto
Código SQL [-]
select sum(d.debe-d.haber)
 from cab_diario c , det_diario d where c.key_cab_diario=d.key_cab_diario
  and c.estado='T' and extract(year from c.fecha_diario)=:anio
  and d.key_plan_ctas in (58,533,23,419,492,29,544,536,576,577,283,284)



Gracias por su tiempo
__________________
IVAND

Última edición por Casimiro Notevi fecha: 08-10-2019 a las 12:57:44. Razón: Se ve mal el tema
Responder Con Cita
  #2  
Antiguo 08-10-2019
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 523
Poder: 21
IVAND Va por buen camino
Este es el store procedure no se porque arriba sale tan mal
Código SQL [-]
create or alter procedure SP_FLUJO_EFECTIVO (
    ANIO integer)
returns (
    KEY_FLUJO integer,
    NOMBRE_CUENTA varchar(200),
    CUENTA varchar(50),
    MONTO numeric(15,2),
    LISTA varchar(100),
    LISTA2 varchar(10))
as
begin
 FOR select x.key_flujo, x.nombre_cuenta, X.cuenta,x.cuentas_afectan
 from flujo_efectivo x where x.key_flujo=172 into :key_flujo,:nombre_cuenta,:cuenta,:lista Do
 Begin
  select sum(d.debe-d.haber)
    from cab_diario c ,det_diario d
    where c.key_cab_diario=d.key_cab_diario
    and c.estado='T'
    and extract(year from c.fecha_diario)=:anio
    and d.key_plan_ctas in (:lista) into :monto ;
  /* Procedure Text */
  suspend;

 End
end
__________________
IVAND

Última edición por Casimiro Notevi fecha: 08-10-2019 a las 12:58:57.
Responder Con Cita
  #3  
Antiguo 08-10-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Prueba a cambiar el 'in' por el 'exists'.
Responder Con Cita
  #4  
Antiguo 08-10-2019
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 16
TOPX Va camino a la fama
Hola

Por su sintaxis, parece que utilizara Firebird. Aunque no estoy seguro.

De todas maneras,
-
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #5  
Antiguo 09-10-2019
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 523
Poder: 21
IVAND Va por buen camino
Si disculpa utilizo firebird 2.5
__________________
IVAND
Responder Con Cita
  #6  
Antiguo 09-10-2019
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 523
Poder: 21
IVAND Va por buen camino
Gracias por su respuesta , pero exists no funciona ya que lo que estoy pasando es una cadena

formada de esta manera en la base de datos


select sum(d.debe-d.haber)
from cab_diario c , det_diario d where c.key_cab_diario=d.key_cab_diario
and c.estado='T' and extract(year from c.fecha_diario)=:anio
and d.key_plan_ctas in (58,533,23,419,492,29,544,536,576,577,283,284)

asi deberia armarse el query pero si paso la cadena desde la base da error de string
__________________
IVAND
Responder Con Cita
  #7  
Antiguo 09-10-2019
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 523
Poder: 21
IVAND Va por buen camino
Agradecido

Código SQL [-]
create or alter procedure SP_FLUJO_EFECTIVO (
    ANIO integer)
returns (
    KEY_FLUJO integer,
    NOMBRE_CUENTA varchar(500),
    CUENTA varchar(500),
    MONTO numeric(15,2),
    LISTA varchar(500))
as
declare variable SMTP varchar(500);
begin
 FOR select x.key_flujo, x.nombre_cuenta, X.cuenta,x.cuentas_afectan
 from flujo_efectivo x into :key_flujo,:nombre_cuenta,:cuenta,:lista Do
 Begin
  monto=0;
  if (:lista is not null) then
  Begin
  smtp = 'select sum(d.debe-d.haber)
  from cab_diario c , det_diario d where c.key_cab_diario=d.key_cab_diario
  and c.estado=''T'' and extract(year from c.fecha_diario)=2018
  and d.key_plan_ctas in ('||:lista||')';

  EXECUTE STATEMENT :smtp into :monto;
  End
 /* Procedure Text */
  suspend;

 End
end

Ahi quedo el SP Gracias a los dos companeros por su tiempo y amabilidad
__________________
IVAND
Responder Con Cita
  #8  
Antiguo 09-10-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por IVAND Ver Mensaje
Gracias por su respuesta , pero exists no funciona ya que lo que estoy pasando es una cadena
formada de esta manera en la base de datos
select sum(d.debe-d.haber)
from cab_diario c , det_diario d where c.key_cab_diario=d.key_cab_diario
and c.estado='T' and extract(year from c.fecha_diario)=:anio
and d.key_plan_ctas in (58,533,23,419,492,29,544,536,576,577,283,284)
asi deberia armarse el query pero si paso la cadena desde la base da error de string
Suponía que esos datos estaban extraidos de un campo de una tabla, y no que era una cadena "fija".
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Pasar Nombre de componenete como parametro de una funcion dandyuno C++ Builder 9 08-09-2015 01:59:02
Enviar BSTR como parámetro de funcion mordaz C++ Builder 2 16-08-2014 01:40:02
Pasar como parametro el where en una funcion cso2000 MS SQL Server 2 15-02-2005 02:49:47
pasar parametro a un procedimiento desde select hibero Firebird e Interbase 2 01-06-2004 19:58:42
Uso De Like De Select Con Parametro cmena Varios 2 05-05-2004 01:21:54


La franja horaria es GMT +2. Ahora son las 19:21:58.


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