Fijate que solamente me da al ejecutarlo desde delphi y lo he hecho con muchos procedimientos este es el codigo.
Código SQL
[-]
SET TERM ^ ;
CREATE PROCEDURE SER_CALCULA_PRECIO_MANO_OBRA(
MANO_OBRA INTEGER,
TIPO_PRECIO CHAR(2))
RETURNS (
PRECIO_VENTA NUMERIC(15,2))
AS
DECLARE VARIABLE VCOSTO DECIMAL(15,2);
DECLARE VARIABLE VFACTOR DECIMAL(15,4);
DECLARE VARIABLE VPRECIO DECIMAL(15,2);
DECLARE VARIABLE VBASE_PRECIO CHAR(1);
DECLARE VARIABLE VTIPO CHAR(1);
DECLARE VARIABLE VVALOR NUMERIC(15,2);
DECLARE VARIABLE VPORCENTAJE NUMERIC(15,2);
DECLARE VARIABLE VVALOR_BASE NUMERIC(15,2);
begin
SELECT COSTO_HORA, FACTOR_GANANCIA, PRECIO_HORA
FROM SER_MANO_OBRA
WHERE CODIGO = :MANO_OBRA
INTO :VCOSTO, :VFACTOR, :VPRECIO;
PRECIO_VENTA = 0.0;
IF (VPRECIO = 0) THEN
BEGIN
IF (VFACTOR > 1) THEN
PRECIO_VENTA = REDONDEAR(VCOSTO * VFACTOR,2);
ELSE
IF (VFACTOR < 1) THEN
PRECIO_VENTA = REDONDEAR(VCOSTO / VFACTOR,2);
ELSE
PRECIO_VENTA = VCOSTO;
END
ELSE
PRECIO_VENTA = :VPRECIO;
IF (RTRIM(:TIPO_PRECIO) <> '') THEN
BEGIN
SELECT BASE_COSTO_PRECIO, TIPO, PORCENTAJE, 0.0
FROM FAC_TIPO_PRECIO
WHERE (CODIGO = :TIPO_PRECIO)
INTO :VBASE_PRECIO, :VTIPO, :VPORCENTAJE, :VVALOR;
IF ((:VVALOR = 0) AND (RTRIM(:VBASE_PRECIO) <> '') AND (RTRIM(:VTIPO) <> '')) THEN
BEGIN
IF (:VBASE_PRECIO = 'C') THEN
VVALOR_BASE = :VCOSTO;
IF (:VBASE_PRECIO = 'P') THEN
EXECUTE PROCEDURE SER_CALCULA_PRECIO_MANO_OBRA :MANO_OBRA, ' ' RETURNING_VALUES :VVALOR_BASE;
IF (VTIPO = '+') THEN
PRECIO_VENTA = :VVALOR_BASE + REDONDEAR(:VVALOR_BASE * (:VPORCENTAJE / 100),2);
IF (VTIPO = '-') THEN
PRECIO_VENTA = :VVALOR_BASE - REDONDEAR(:VVALOR_BASE * (:VPORCENTAJE / 100),2);
END
ELSE
PRECIO_VENTA = :VVALOR;
END
PRECIO_VENTA = REDONDEAR(PRECIO_VENTA,2);
suspend;
end
^
SET TERM ; ^
y la forma de ejecutarlo es la siguiente:
Código:
function TdmServicio_Proc.Calcula_Precio_Mano_Obra(Mano_Obra : LongInt; Tipo_Precio : String) : Double;
begin
SPCalcula_Precio_Mano_Obra.ParamByName('MANO_OBRA').Value := Mano_Obra;
SPCalcula_Precio_Mano_Obra.ParamByName('TIPO_PRECIO').Value := Tipo_Precio;
SPCalcula_Precio_Mano_Obra.ExecProc;
Result := SPCalcula_Precio_Mano_Obra.ParamByName('PRECIO_VENTA').Value;
end;
No entiendo he hecho esto un sin numero de veces y nunca me habia dado este error, y al buscar el la web es muy poca la informacion que aparece sobre esto.
Hasta pronto