Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-08-2007
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
Ya parece que sí funciona !

Código SQL [-]
begin

  Select BOJ.BOOKINGNO
  from BOOKINGS_OBJECTS BOJ
  left join BOOKINGS BO
    on BO.BOOKINGNO = BOJ.BOOKINGNO
  where
    BOJ.BUILDINGNO = :"BUILDING_NO" and
    BOJ.OBJECTNO = :"OBJECT_NO" and 
    BOJ.DATETO <= :"DATE_SP" and
    BO.STATUS = 3
    Into BOOK_NO;

  if (not :"BOOK_NO" is Null) then
    SUSPEND;
  else begin

    Select BOJ2.BOOKINGNO 
    from BOOKINGS_OBJECTS BOJ2
    left join BOOKINGS BO2
      on BO2.BOOKINGNO = BOJ2.BOOKINGNO
    where
      BOJ2.BUILDINGNO = :"BUILDING_NO" and
      BOJ2.OBJECTNO = :"OBJECT_NO" and
      BOJ2.DATEFROM <= :"DATE_SP" and
      BOJ2.DATETO >= :"DATE_SP" and
      BO2.STATUS <= 2
      Into BOOK_NO;
    SUSPEND;

  end

end
__________________
Piensa siempre en positivo !
Responder Con Cita
  #2  
Antiguo 08-08-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 24
ArdiIIa Va por buen camino
Creo que es tu caso, que solamente un registro va acumplir la condición... ??

Si fueran varios registros los que cumplieran la condición, seguramente tal como lo dejas (SIN EL FOR) te petará...

Haz la prueba.
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #3  
Antiguo 08-08-2007
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
Gracias ArdiIIa.

Creo que me estoy complicando bastante la vida por querelo hacer en un SP y no por código con diferentes preguntas y consultas.

Ya me dí cuenta de lo que dices y lo estuve pensando. En teoría sólo debería devolver un registro. Pero al momento de ahora no te puedo decir al 100% seguro si finalmente puede darse también que existan más de un registro.

Si fuera así, tampoco lo tengo solucionado porque el SP anterior no me funciona correctamente por lo que expliqué. Si no existe ningún registro que cumpla la primera condición, no entra siquiera al segundo Select. No sé como se podría hacer eso.

Y ahora añado una nueva duda en relación con este tema. Todo esto viene porque en mi Select principal, dentro del programa, tendría que hacer esto :

Código SQL [-]
Select OJ.OBJECTNO,
(Select BOOK_NO from RACK_OBTAIN_BOOKINGNO(OJ.BUILDINGNO, OJ.OBJECTNO, '08-08-2007')) as BOOK_NO
from OBJECTS OJ
left join BOOKINGS BO
  on BO.BOOKINGNO = BOOK_NO
order by OJ.OBJECTNO
donde RACK_OBTAIN_BOOKINGNO es el SP. Ahora bien, lo que quiero es reutilizar el valor que me devuelve el SP para obtener dentro de ese mismo Select principal otros valores (en este caso dentro de la tabla BOOKINGS), de otras tablas cuyos registros deben depender del valor devuelto por el SP.

Y me dá error al intentar reutilizar el 'BOOK_NO' que me devuelve el SP.

Así que no sé cual será la mejor solución.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #4  
Antiguo 08-08-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.070
Poder: 32
jhonny Va camino a la famajhonny Va camino a la fama
Supongo que Book:NO es un parametro de salida, entonces la cosa deberia ser, asi:

Código SQL [-]
begin

  Select BOJ.BOOKINGNO
  from BOOKINGS_OBJECTS BOJ
  left join BOOKINGS BO
    on BO.BOOKINGNO = BOJ.BOOKINGNO
  where
    BOJ.BUILDINGNO = :"BUILDING_NO" and
    BOJ.OBJECTNO = :"OBJECT_NO" and 
    BOJ.DATETO <= :"DATE_SP" and
    BO.STATUS = 3
    Into :BOOK_NO; /*Ha Book_NO le faltan esos dos puntos, para indicarle que es un parametro de salida*/

  if (not :BOOK_NO is Null) then /*Quitale esas comillas, me temo que el motor dira que nunca es Null ya que siempre es igual a "BOOK_NO"*/
    SUSPEND;
  else begin

    Select BOJ2.BOOKINGNO 
    from BOOKINGS_OBJECTS BOJ2
    left join BOOKINGS BO2
      on BO2.BOOKINGNO = BOJ2.BOOKINGNO
    where
      BOJ2.BUILDINGNO = :"BUILDING_NO" and
      BOJ2.OBJECTNO = :"OBJECT_NO" and
      BOJ2.DATEFROM <= :"DATE_SP" and
      BOJ2.DATETO >= :"DATE_SP" and
      BO2.STATUS <= 2
      Into :BOOK_NO; /*Lo mismo aca*/
    SUSPEND;

  end

end>
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 08-08-2007 a las 19:40:43.
Responder Con Cita
  #5  
Antiguo 08-08-2007
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
Gracias Jhonny también a tí.

Independientemente de los ':' en el BOOK_NO como parámetro de salida, funciona correctamente al menos en Interbase 7.5

Y las comillas que hay en el
Código SQL [-]
if (not :"BOOK_NO" is Null) then ...
las mete el IBConsole él solito. Si las quito y vuelvo a grabar el SP, me vuelve a poner las comillas.

Independientemente de la sintaxis que funciona de una manera u otra, no resulevo aun la problemática de qué pasa si son dos los registros que me devuelve el 1er Select, tal y como indica ArdiIIa.

Y por el contrario, tal y como indiqué, qué pasa si el primer Select no devuelve ningún registro. Pues que a mi entender no entraba a ejecutar siquiera el segundo Select.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #6  
Antiguo 08-08-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 24
ArdiIIa Va por buen camino
Vaya, creía que te había mandado otro post contestanto y ha sido que no..

Mira gluglu creo que esto que te voy a poner, te debería funcionar independientemente del número de registros que haya en la búsqueda... prueba y me cuentas:

Código SQL [-]

 FOR  Select BOJ.BOOKINGNO
  from BOOKINGS_OBJECTS BOJ
  left join BOOKINGS BO
    on BO.BOOKINGNO = BOJ.BOOKINGNO
  where
    BOJ.BUILDINGNO = :"BUILDING_NO" and
    BOJ.OBJECTNO = :"OBJECT_NO" and 
    BOJ.DATETO <= :"DATE_SP" and
    BO.STATUS = 3
    Into :BOOK_NO
DO
  if (:BOOK_NO is NOT Null) then 
    SUSPEND;
  else begin
FOR Select BOJ2.BOOKINGNO 
    from BOOKINGS_OBJECTS BOJ2
    left join BOOKINGS BO2
      on BO2.BOOKINGNO = BOJ2.BOOKINGNO
    where
      BOJ2.BUILDINGNO = :"BUILDING_NO" and
      BOJ2.OBJECTNO = :"OBJECT_NO" and
      BOJ2.DATEFROM <= :"DATE_SP" and
      BOJ2.DATETO >= :"DATE_SP" and
      BO2.STATUS <= 2
      Into :BOOK_NO
DO
    SUSPEND;
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #7  
Antiguo 08-08-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.070
Poder: 32
jhonny Va camino a la famajhonny Va camino a la fama
Ahhh, y ¿Porque no usar un for select?

Nota: ArdiIIa se me a adelantado, y de que manera, mejor no se podia explicar.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 08-08-2007 a las 20:17:37. Razón: ArdiIIa se me adelanto
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
Stored Procedure,Triggers Io Firebird e Interbase 8 08-01-2007 16:17:55
Problema con stored procedure dape Firebird e Interbase 11 20-10-2005 05:13:23
Ver los Stored Procedure tgsistemas SQL 0 06-04-2004 17:18:22
Stored Procedure tgsistemas SQL 1 27-02-2004 13:10:33
problema con stored procedure Markoz Firebird e Interbase 8 27-06-2003 13:46:31


La franja horaria es GMT +2. Ahora son las 03:51:09.


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