PDA

Ver la Versión Completa : ayuda con una suma en interbase


jordangel
14-07-2012, 07:18:47
buenas noches amigos les escribo para pedirles ayuda con un problemita en interbase

estoy intentado crear un store procedure de incluir, el programa lo corre pero al momento de realizar una prueba me muestra todo lo ke agrego pero no me calcula el total, me sale NULL, pero en lo demas si me agrega los valores.. porfa ayudenme en este codigo.

aqui el codigo

set term!
create procedure incluvend (icivend varchar (15), iapenomb varchar (30), ifnac date, isbase float, ibsfact float,
ibscobranza float, iporcomisvta float, iporcomiscob float)
as
declare variable totaldev float;
declare variable bscomisvta float;
declare variable bscomiscob float;
declare variable sbase float;
declare variable bsfact float;
declare variable bscobranza float;
declare variable porcomisvta float;
declare variable porcomiscob float;
begin
bscomisvta= :bsfact*:porcomisvta/100;
bscomiscob= :bscobranza*:porcomiscob/100;
totaldev= :sbase+:bscomisvta+:bscomiscob;
insert into vendedor values
(:icivend,:iapenomb,:ifnac,:isbase,:ibsfact,:ibscobranza,:iporcomisvta,:iporcomiscob,:totaldev);
end


a cada campo de coloce una (i) antes del nombre como para identificar que son de incluir, execpto el total que no esta declarado arriba

ecfisa
14-07-2012, 07:25:14
Hola jordangel.

Por favor cuando incluyas código en tus mensaje utiliza TAG's para darle más legibilidad. Te pongo una imágen que explica el uso:

http://img403.imageshack.us/img403/3461/75416396.jpg

Ya las agregué al codigo de tu mensaje.

Saludos y gracias por tu colaboración. :)

Casimiro Notevi
14-07-2012, 09:26:27
No queda claro el problema :confused:

Gallosuarez
14-07-2012, 16:09:34
Jordangel:

De acuerdo a la documentación la sentencia insert es la siguiente:

INSERT INTO tabal | vista (lista columnas)
VALUES (lista de valores)
[RETURNING lista_columnas [INTO lista variables]]


En tu sentencia insert, veo la lista de valores a sustituir , pero ¿Donde está la lista de las columnas?
Ignoro si se pueda utilizar como tu la tienes, pero mi costumbre es siempre poner toda la lista de las columnas y despues poner toda la lista de valores, ¿me explico?

Saludos,
GST

birmain
14-07-2012, 16:36:46
Cuando se opera con un valor null, el resultado de cualquier operación que se realice con el, también es null. Para evitar esto, antes de operar con ciertos valores, es conveniente hacer la siguiente comprobación:

if (valor is nul) then valor =0

Casimiro Notevi
14-07-2012, 16:54:37
Gallosuarez, sí que se puede omitir la lista de campos si se dan los valores de todos ellos.

Casimiro Notevi
14-07-2012, 16:57:51
Cuando se opera con un valor null, el resultado de cualquier operación que se realice con el, también es null. Para evitar esto, antes de operar con ciertos valores, es conveniente hacer la siguiente comprobación:
Código SQL [-]if (valor is nul) then valor =0



Para esos casos es conveniente usar coalesce, que es una "abreviatura" :) del if .. then

coalesce( : parametro, 0 )

Si el parámetro que se le pasa al campo es nulo entonces le da el valor cero.

Gallosuarez
15-07-2012, 03:06:27
Jordangel:

Si afirmas que todos los demás valores no presentan ningún problema y la suma total contiene el valor nulo, entonces:

totaldev= :sbase+:bscomisvta+:bscomiscob;


la variable sbase debe de tener un valor nulo ... y efectivamente, nunca inicializas tal variable .... creo que mas bien debe de ir el parámetro isbase, ¿o no?

Saludos,
GST

Casimiro Notevi
15-07-2012, 11:46:33
Claro, si el resultado es nulo es porque algún valor/parámetro es nulo.

gendelphi
18-07-2012, 01:35:09
Una buena guía para manejo de NULL en Firebird (http://www.firebirdsql.org/manual/es/nullguide-es.html)

Casimiro Notevi
18-07-2012, 08:29:02
Aquí está (http://intitec.com/varios/Firebird_Guia_Null.pdf) traducida al español.