Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > DB2
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 26-07-2013
waly2k1 waly2k1 is offline
Miembro
 
Registrado: dic 2006
Ubicación: El país de las maravillas(Argentina)
Posts: 251
Poder: 18
waly2k1 Va por buen camino
Ejecutar cadena SQL desde un SP

Hola muchachos!
Tengo una cadena sql que se arma dinamicamente cuando selecciono unas opciones y ejecuto luego desde una consulta
no genera ningun error, tampoco actualiza nada. He probado desde tantas opciones, pero no obtuve resultado alguno
entonces decidí poner un execute dentro de un strored procedure que evalue la cadena que paso como parámetro,
pero tampoco me deja hacerlo, no es como en MS-SQL Server.
Así que pregunto, como sería esto desde un SP, o sea que reciba como parametro la consulta de actualización y luego
la ejecute. Y por qué puede ser que la consulta desde la aplicación no genere ningun resultado y tampoco genere error?
Saludos y cualquier ayuda me serviria de mucho, muchas gracias!

Paso acá un ejemplo de la consulta, ya que tampoco me actualiza desde una consola
UPDATE DB2ADMIN.PRODUCTO SET PRECIO_COSTO=PRECIO_COSTO* ( 1 + 10/100 );
Si pongo un precio de costo fijo sí lo hace, pero en este ejemplo que incremento un 10% no
Gracias!

Última edición por waly2k1 fecha: 26-07-2013 a las 07:14:09. Razón: ejemplo
Responder Con Cita
  #2  
Antiguo 26-07-2013
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Hola waly2k1,

Es posible que el valor de PRECIO_COSTO este a NULL y por esta razón no te actualiza el precio, hay una función en SQL Server que es ISNULL(CAMPO, 0) esto quiere decir que si el CAMPO está a NULL se convierte a 0 (cero)

Valor del Campo:
Cita:
PRECIO_COSTO(NULL) = PRECIO_COSTO(NULL) * (1 + (10/100)) = NULL
Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #3  
Antiguo 26-07-2013
waly2k1 waly2k1 is offline
Miembro
 
Registrado: dic 2006
Ubicación: El país de las maravillas(Argentina)
Posts: 251
Poder: 18
waly2k1 Va por buen camino
Rta. olbeup

No, el campo contiene valor. Suena logico si lo que decis, pero debería dejarme un valor nulo en todo caso.
Pero de hecho tengo un solo registro en la tabla, ya que estoy migrando recién la base desde MySQL a DB2.
El problema acá es que a DB2 no le gusta la expresión:
SET PRECIO_COSTO = PRECIO_COSTO * (1 + ( 10 /100))

Si en el codigo realizo algo como esto:
Código:
var
dPORC:double;

dPORC := txtPORC.Value / 100;
dPORC := 1 + dPORC;
y luego:
'PRECIO_COSTO=PRECIO_COSTO * ' + FloatToStr( dblPORC )
Así si funciona, por lo que veo es que no puedo pasar una expresion para que evalue, y en todos los SMDB que vi hasta ahora si lo soportan
En fin, mientras se pueda hacerlo de cualquier manera no importa, pero cuando me toque la parte de grandes cálculos, ej. IVA y demas, me
vuelvo loco con esto, ahí si que tendré que modificar muchas lineas de código, por algo que viene funcionando hace mucho con otros motores
de base de datos normalmente. Pero bueh, así se aprende (por lo menos a renegar más hehe)
Muchas gracias amigo por la ayuda, un abrazo!
Responder Con Cita
  #4  
Antiguo 26-07-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 20
ozsWizzard Va por buen camino
No estoy seguro si en DB2, en otras bases de datos hay una función que hace que devuelva un valor específico en caso de nulo.

Ejemplo oracle y FireBird (Función NVL):
Código SQL [-]
UPDATE DB2ADMIN.PRODUCTO SET PRECIO_COSTO = NVL(PRECIO_COSTO, 0) * ( 1 + 10/100 );

Ejemplo MS Sql Server (Función ISNULL)
Código SQL [-]
UPDATE DB2ADMIN.PRODUCTO SET PRECIO_COSTO = ISNULL(PRECIO_COSTO, 0) * ( 1 + 10/100 );

Ejemplo MySql y creo que en DB2 (Función IFNULL)
Código SQL [-]
UPDATE DB2ADMIN.PRODUCTO SET PRECIO_COSTO = IFNULL(PRECIO_COSTO, 0) * ( 1 + 10/100 );

Contrasta la sintaxis que no sé seguro que sea así
__________________
La Madurez se llama...
~~~Gaia~~~
Responder Con Cita
  #5  
Antiguo 29-07-2013
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 21
defcon1_es Va por buen camino
Puntualizo: En Firebird no existe la funcion NVL (al menos de forma nativa), es COALESCE:
Código SQL [-]
UPDATE DB2ADMIN.PRODUCTO SET PRECIO_COSTO = COALESCE(PRECIO_COSTO, 0) * ( 1 + 10/100 );
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...
Responder Con Cita
  #6  
Antiguo 29-07-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 20
ozsWizzard Va por buen camino
Tenía mal la chuleta, gracias por la corrección
__________________
La Madurez se llama...
~~~Gaia~~~
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
Problema de asignación de puntero desde una cadena Sapiem OOP 5 26-10-2012 22:14:41
Funcion para buscar cadena dentro de otra cadena y el numero de veces flystar Varios 3 02-07-2007 22:48:08
Ejecutar SP desde php micayael PHP 6 26-12-2005 11:46:54
Buscar desde Delphi una cadena en PDF Jose Manuel Varios 0 17-06-2004 19:31:16
Ejecutar desde CD ROM _Juno_ Varios 4 11-05-2004 14:47:26


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


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