Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-04-2011
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 23
gluglu Va por buen camino
Parece que funciona de momento ....

Tengo que terminar ahora el código completo, para encajar todo el código Delphi en sentencias SQL.

De momento el tocho de sentencia anterior ha quedado reducido a :

Código SQL [-]
Select -1, -2, RL.BOOKINGNO,
  case when SP_PAXTYPE.OUT_PAXTYPE = 1 then RL.PAXQUANTITY else null end as PAXTYPE1_QUANT,
  case when SP_PAXTYPE.OUT_PAXTYPE = 1 and SP_BOARDTYPE.OUT_BOARDTYPE > 0 then SP_BOARDTYPE.OUT_BOARDTYPE else null end as BOADTYPE1,
  case when SP_PAXTYPE.OUT_PAXTYPE = 2 then RL.PAXQUANTITY else null end as PAXTYPE2_QUANT,
  case when SP_PAXTYPE.OUT_PAXTYPE = 2 and SP_BOARDTYPE.OUT_BOARDTYPE > 0 then SP_BOARDTYPE.OUT_BOARDTYPE else null end as BOADTYPE2,
  case when SP_PAXTYPE.OUT_PAXTYPE = 3 then RL.PAXQUANTITY else null end as PAXTYPE3_QUANT,
  case when SP_PAXTYPE.OUT_PAXTYPE = 3 and SP_BOARDTYPE.OUT_BOARDTYPE > 0 then SP_BOARDTYPE.OUT_BOARDTYPE else null end as BOADTYPE3,
  case when BPD.ROOMINGLISTNO is null
       then case when SP_PAXTYPE.OUT_PAXTYPE = 1     then RL.PAXQUANTITY     else null end
       else case when BPD.PAXTYPE1_QUANT is not null then BPD.PAXTYPE1_QUANT else null end
  end as P_TYPE1_QUANT,
  case when BPD.ROOMINGLISTNO is null
       then case when SP_PAXTYPE.OUT_PAXTYPE = 1 and SP_BOARDTYPE.OUT_BOARDTYPE > 0 then SP_BOARDTYPE.OUT_BOARDTYPE else null end
       else case when BPD.PAXTYPE1_QUANT is not null and BPD.BOARDTYPE1 is not null then BPD.BOARDTYPE1 else null end
  end as B_TYPE1,
  case when BPD.ROOMINGLISTNO is null
       then case when SP_PAXTYPE.OUT_PAXTYPE = 2     then RL.PAXQUANTITY     else null end
       else case when BPD.PAXTYPE2_QUANT is not null then BPD.PAXTYPE2_QUANT else null end
  end as P_TYPE2_QUANT,
  case when BPD.ROOMINGLISTNO is null
       then case when SP_PAXTYPE.OUT_PAXTYPE = 2 and SP_BOARDTYPE.OUT_BOARDTYPE > 0 then SP_BOARDTYPE.OUT_BOARDTYPE else null end
       else case when BPD.PAXTYPE2_QUANT is not null and BPD.BOARDTYPE2 is not null then BPD.BOARDTYPE2 else null end
  end as B_TYPE2,
  case when BPD.ROOMINGLISTNO is null
       then case when SP_PAXTYPE.OUT_PAXTYPE = 3     then RL.PAXQUANTITY     else null end
       else case when BPD.PAXTYPE3_QUANT is not null then BPD.PAXTYPE3_QUANT else null end
  end as P_TYPE3_QUANT,
  case when BPD.ROOMINGLISTNO is null
       then case when SP_PAXTYPE.OUT_PAXTYPE = 3 and SP_BOARDTYPE.OUT_BOARDTYPE > 0 then SP_BOARDTYPE.OUT_BOARDTYPE else null end
       else case when BPD.PAXTYPE3_QUANT is not null and BPD.BOARDTYPE3 is not null then BPD.BOARDTYPE3 else null end
  end as B_TYPE3,
  SP_OPERATORDEBIT.OUT_OPERATORDEBIT,
  BPD.CREATETIMESTAMP, BPD.CREATEUSER, BPD.CREATEPOSITION,
  BPD.MODIFYTIMESTAMP, BPD.MODIFYUSER, BPD.MODIFYPOSITION
from BOOKINGS_ROOMINGLIST RL
left join BOOKINGS_OBJECTS BO
  on BO.ROOMINGLISTNO = RL.ROOMINGLISTNO
  and BO.DATEFROM <= '04-30-2011' and BO.DATETO >= '04-01-2011'
left join BOOKINGS_PAXDETAIL BPD
  on RL.ROOMINGLISTNO = BPD.ROOMINGLISTNO
left join BOOKINGS BK
  on RL.BOOKINGNO = BK.BOOKINGNO
left join SP_PAXDETAIL_PAXTYPE(RL.BOOKINGNO) SP_PAXTYPE
  on RL.ROOMINGLISTNO = RL.ROOMINGLISTNO
left join SP_PAXDETAIL_BOARDTYPE(RL.BOOKINGNO) SP_BOARDTYPE
  on RL.ROOMINGLISTNO = RL.ROOMINGLISTNO
left join SP_PAXDETAIL_OPERATORDEBIT(RL.BOOKINGNO) SP_OPERATORDEBIT
  on RL.ROOMINGLISTNO = RL.ROOMINGLISTNO
where RL.BOOKINGNO = 101974

siendo SP_PAXDETAIL_PAXTYPE, SP_PAXDETAIL_BOARDTYPE y SP_PAXDETAIL_OPERATORDEBIT los procedimientos almacenados que he creado. No creo necesario detallar el contenido de los SP ya que lo único que importa aquí es que llamo desde esta sentencia a los SP's sin entrar en el detalle de lo que devuelve cada uno.

__________________
Piensa siempre en positivo !
Responder Con Cita
  #2  
Antiguo 15-04-2011
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.676
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
¡¡¡Mareante!!!

Lo raro es que no te hayas quedado sin memoria, en versiones anteriores de firebird, creo que hasta la v1.0 el tamaño máximo para los procedimientos, triggers, etc. era de sólo 32 Kb. Así que había que seguir el lema de "devide y vencerás" , haciendo lo que has hecho, procedimientos alternativos que se llaman desde el principal.

Lo malo de ese "mogollón" es que como algo no funcione bien te tienes que concentrar "mu bien concentrao" para descubrir el problema
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Executar un procedimiento dentro de un Select? mendozasoftware MS SQL Server 7 31-10-2006 22:16:43
Como Utilizar Iif enun Select ? Alejandro73 SQL 6 21-09-2006 00:55:53
Utilizar índices de select como datos elcigarra PHP 2 19-06-2006 03:22:58
Como usar un select dentro de otro erasmorc SQL 6 14-12-2005 01:33:32
SP dentro de Select buitrago_listas Firebird e Interbase 1 17-01-2005 13:43:04


La franja horaria es GMT +2. Ahora son las 20:04:38.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi