Fórum Como truncar um valor numa Trigger;Procedure : #52264

15/08/2005

0

Ola!
Sou desenv. D + IB/FB + DBExpress

TEnho a seguinte duvida em Trigger/Procedure:

Como truncar o valor: 12.127895678
e obeter o resultado : 12.12


Por favor responda por completo de deixe um exemplo.

Desde ja meus agradecimentos

T+


ANT.CARLOS/SP


Ant.carlos/sp

Ant.carlos/sp

Responder

Posts

15/08/2005

Afarias

Vc vai ter q usar uma UDF!

no caso da UDF padrão do IB não tem uma função específica para isso mas vc pode usar a FLOOR pra ´simular´ ::

DECLARE EXTERNAL FUNCTION floor
DOUBLE PRECISION
RETURNS DOUBLE PRECISION BY VALUE
ENTRY_POINT ´IB_UDF_floor´ MODULE_NAME ´ib_udf´;


select floor(12.127895678*100)/100 from ...


outras bibliotecas podem ter uma função específica para o caso

T+


Responder

Gostei + 0

17/08/2005

Ant.carlos/sp

Olá! :D

Uso: D7 + FB + DBExpress

Não consegui fazer as funcoes funcionarem:
Floor(), SubString(), Lenght(), Mod(), etc...
na minha Trigger!


-----------
[color=red:ee9b7a0f07]A.Farias escreveu:
Vc vai ter q usar uma UDF!

no caso da UDF padrão do IB não tem uma função específica para
isso mas vc pode usar a FLOOR pra ´simular´ ::

DECLARE EXTERNAL FUNCTION floor
DOUBLE PRECISION
RETURNS DOUBLE PRECISION BY VALUE
ENTRY_POINT ´IB_UDF_floor´ MODULE_NAME ´ib_udf´; [/color:ee9b7a0f07]
-----------

1-O que tenho q inseri na minha Trigger p/ que
as Funcoes funcionem:
Ex: SubString(), Mod(), Floor, etc..
Pois nenhuma funciona na minha trigger.


2-Abri alguns arquivos *.Sql do IB/FB e vi que lá tem
várias funcoes já prontas, como faze-las funcionarem.
Veja abaixo trecho dos arquivos.


3- select floor(12.127895678*100)/100 from ...
3.1 - Qual o comando completo ? (from ...)
3.2 - Como faço para retornar o valor numa variavel ?



Por favor, faça um passa a passo pq é a 1ª vez que faço isso e
estou meio perdido.


Desde já meus agradecimentos. :D

ANT.CARLOS/SP




===============================
[color=red:ee9b7a0f07]IB_UDF.SQL - UDFs DO Interbase
IB_UDF.SQL - UDFs DO Interbase[/color:ee9b7a0f07]===============================
* f l o o r
* Functional description:
* Returns a floating-point value
* representing the largest integer that
*is less than or equal to x
*
*****************************************/
DECLARE EXTERNAL FUNCTION floor
DOUBLE PRECISION
RETURNS DOUBLE PRECISION BY VALUE
ENTRY_POINT ´IB_UDF_floor´ MODULE_NAME ´ib_udf´;


******************************************
* m o d
* Functional description:
*Returns the remainder part of the
*division of the two input parameters.
*
*****************************************/
DECLARE EXTERNAL FUNCTION mod
INTEGER, INTEGER
RETURNS DOUBLE PRECISION BY VALUE
ENTRY_POINT ´IB_UDF_mod´ MODULE_NAME ´ib_udf´;


*****************************************
* s t r l e n
* Functional description:
*Returns the length of a given string.
*
*****************************************/
DECLARE EXTERNAL FUNCTION strlen
CSTRING(32767)
RETURNS INTEGER BY VALUE
ENTRY_POINT ´IB_UDF_strlen´ MODULE_NAME ´ib_udf´;


==================================
[color=red:ee9b7a0f07] FBUDF.SQL //.....UDFs do FIREBIRD
FBUDF.SQL //.....UDFs do FIREBIRD[/color:ee9b7a0f07] ==================================

//....TRUNCATE
--FBUDF_API paramdsc* fbtruncate(paramdsc* v, paramdsc* rc)
declare external function Truncate
int by descriptor, int by descriptor
returns parameter 2
entry_point ´fbtruncate´ module_name ´fbudf´;

//...ROUND
--FBUDF_API paramdsc* fbround(paramdsc* v, paramdsc* rc)
declare external function Round
int by descriptor, int by descriptor
returns parameter 2
entry_point ´fbround´ module_name ´fbudf´;


Responder

Gostei + 0

17/08/2005

Afarias

|1-O que tenho q inseri na minha Trigger p/ que
|as Funcoes funcionem:

1) vc deve ter a ´DLL´ das funções na pasta UDF da sua instalação do servidor IB ou FB

2) vc deve registrar no seu banco as funções desejadas usando o comando DECLARE EXTERNAL FUNCTION (como no exemplo) -- geralmente vc tem esses comandos na documentação da biblioteca.


|2-Abri alguns arquivos *.Sql do IB/FB e vi que lá tem
|várias funcoes já prontas, como faze-las funcionarem.

apenas execute os comandos no seu banco de dados para aquelas funções que deseja. os scripts das bibliotecas padrão do IB/FB creio que são ´ib_udf.sql´ e ´fbudf.sql´


|3- select floor(12.127895678*100)/100 from ...
|3.1 - Qual o comando completo ? (from ...)

não importa. isso é só um exemplo, vc deve ter o FROM ai.


|3.2 - Como faço para retornar o valor numa variavel ?

usando um procedimento (STORED PROCEDURE)?? algo como:

select floor(...) from ... into :variável;


T+


Responder

Gostei + 0

23/08/2005

Ant.carlos/sp

:D
Olá!

Uso: D7 + FB + DBExpress + IBExpert

Para registrar minha UDFs, abri no IBExpert
a opcao TOOLS\EXECUTE SCRIPT , Inseri as funcões
e executei.
Fiz os teste e funcionou.

Veja:
Tam = strlen(campox);
valor = DIV(12,2);
Resto = mod(11,3);
Tamx = substr(CAMPOX,1,10);
valor2= floor(12.123456*100)/100;


Desde já meus agradecimentos.

ANT.CARLOS/SP


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar