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 Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-11-2014
uper uper is offline
Miembro
 
Registrado: abr 2004
Posts: 296
Poder: 21
uper Va por buen camino
como realizar actualizacion con exists en firebird

b. dias, estoy realizando una actualizacion con fb 2.5 pero no me deja, me manda error:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 1.
if.

este es el codigo:
Código PHP:
 if exists (select REG_ from pedido WHERE REG_=and cliente='02135'then
    update pedido set confirmado
=1 WHERE REG_=and cliente='02135'
Tengo el ibexpert, me falta alguna instruccion
gracias.
Responder Con Cita
  #2  
Antiguo 13-11-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Es que "if exist" no es ninguna sentencia sql, toda sentencia iniciará con un select, update, delete o insert.
Responder Con Cita
  #3  
Antiguo 13-11-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.732
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
El ejemplo que pones no necesita condicionantes.
Si haces un update a un registro cuyos campos REG_=1 y CLIENTE='012345' y no existe ningún registro con esas condiciones, Firebird no modificará ningún registro.
Yo solo haría el update y dejaría que Firebird modifique un registro o ninguno.

De todos modos, hay casos en los que se puede utilizar:
Código SQL [-]
/* marca el campo EXISTE_TIPO en las cabeceras que tienen detalles con ese tipo */
UPDATE TABLA_CABCERA C
SET C.EXISTE_TIPO=1
WHERE
(EXISTS (SELECT CAMPO FROM TABLA_DETALLE
         WHERE
         ID_CABECERA=C.ID AND 
         TIPO=:PARAMETRO_TIPO)
)
Responder Con Cita
  #4  
Antiguo 14-11-2014
uper uper is offline
Miembro
 
Registrado: abr 2004
Posts: 296
Poder: 21
uper Va por buen camino
ok, y que pasa si se trata de realizar una insercion tambien ya que revisando el diseño se necesita realizar una insercion en otra tabla, entonces el exists no es tan valido como los otros SGDB sqlserver x ejemplo, es que es mas manejable.

les agradesco.
Responder Con Cita
  #5  
Antiguo 14-11-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y eso? ¿cómo lo haces en otros sistemas?
Responder Con Cita
  #6  
Antiguo 24-11-2014
uper uper is offline
Miembro
 
Registrado: abr 2004
Posts: 296
Poder: 21
uper Va por buen camino
b. dias a todos, para M$sqlserver casualmente me encuento en inserciones o actualizaciones constantes para ciertas tablas que deben de llenarse de registros para completar ciertos procesos, es decir, les detallo:

tengo una tabla para referenciar los documentos que les daran salida en almacen por ejemplo: salidasAPT campos (sufijo,fecha,docto,tipodoc,fechasalida, statusSalida)
donde el campo tipodoc = F --> factura, R = remision, etc.
statussalida = N (Nuevo) o P (Porcesado)
entonces los documentos se van formando y como se pasen al area de almacen se daran de baja.

La cuestion es que por medio de una aplicacion se hacen estas actualizaciones primero (Insercion o actualizacion) pero si ya esta agregado ya no es necesario volver a agregar pues nos mandaria un error de pk duplicada y por logica pues tendriamos registros duplicados, para este rollo que les comento pues no me quedo mas que hacer lo siguiente:

if exists (select docto from salidasAPTwhere sufijo='02' and docto='REF000012' and tipodoc='R') begin
update salidasapt set statussalida ='N' where sufijo='02' and docto='REF000012' and tipodoc='R'
end else begin
insert into salidasapt values('02','20140514','REF000012','R',null,'N')
end

posteriormente una vez que ya esta el registro almacen lo puede ver los documentos que se le va a dar salida, si existe esta posibilidad de usar el exists en mssql como se puede aplicar con firebrid, es asi como lo hago, pero ahora debo de ocupar algo similar ya que se puede implementar en trigger, o mandar desde una aplicacion el caso seria lo mismo pero con un script es mas facil manejar, por programa tengo que hacer consulta y extraer el resultado para pasar al siguiente, etc.
les agradesco si saben como seria, pues no encuentro algo parecido.
gracias
Responder Con Cita
  #7  
Antiguo 24-11-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Pero eso es una sentencia o un procedimiento almacenado?


Y recuerda poner los tags al código fuente, ejemplo:



Gracias
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
Optimización consulta SQL con EXISTS en Firebird 2.5 briast SQL 0 05-11-2013 12:57:20
Realizar busqueda en firebird miguelgalindo87 Firebird e Interbase 9 02-06-2012 00:17:45
Sugerencias para realizar una actualizacion de un registro en Firebird agustinbus Firebird e Interbase 18 15-03-2012 00:39:00
Exists or not Exists that is the question MaMu SQL 7 05-04-2009 19:29:55
Realizar una inserccion en una tabla con firebird madmai Firebird e Interbase 2 06-10-2005 15:46:03


La franja horaria es GMT +2. Ahora son las 01:09:33.


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