Primeiro declare a UDF como por exemplo :
DECLARE EXTERNAL FUNCTION LTRIM
CSTRING(80) CHARACTER SET NONE
RETURNS CSTRING(80) FREE_IT
ENTRY_POINT ‘IB_UDF_ltrim’ MODULE_NAME ‘ib_udf’;
DECLARE EXTERNAL FUNCTION STRLEN
CSTRING(32767) CHARACTER SET NONE
RETURNS INTEGER BY VALUE
ENTRY_POINT ‘IB_UDF_strlen’ MODULE_NAME ‘ib_udf’;
DECLARE EXTERNAL FUNCTION RTRIM
CSTRING(80) CHARACTER SET NONE
RETURNS CSTRING(80) FREE_IT
ENTRY_POINT ‘IB_UDF_rtrim’ MODULE_NAME ‘ib_udf’;
DECLARE EXTERNAL FUNCTION LTRIM
CSTRING(80) CHARACTER SET NONE
RETURNS CSTRING(80) FREE_IT
ENTRY_POINT ‘IB_UDF_ltrim’ MODULE_NAME ‘ib_udf’;
depois é só usá-la
CREATE PROCEDURE SP_TEMPOLIGPART_SELECIONA
AS
DECLARE VARIABLE STRINGSQL VARCHAR(1000);
DECLARE VARIABLE STRINGSQL2 VARCHAR(1000);
DECLARE VARIABLE LODATA DATE;
DECLARE VARIABLE LOHORA TIME;
DECLARE VARIABLE LONUMERO VARCHAR(100);
DECLARE VARIABLE CODIGORAMAL INTEGER;
DECLARE VARIABLE DATA DATE;
DECLARE VARIABLE HORA TIME;
DECLARE VARIABLE DURACAO TIME;
DECLARE VARIABLE NUMERO CHAR(10);
begin
STRINGSQL = ”;
FOR
SELECT DATA, HORA, NUMERO
FROM LIGACAO
WHERE DATA >= ‘06/14/05′ AND TIPO = ‘PARTICULAR’ AND PABX IS NULL INTO :LODATA, :LOHORA, :LONUMERO
DO
BEGIN
STRINGSQL = ‘ SELECT FIRST 1 CODIGORAMAL, DATA, HORA, DURACAO, NUMERO ‘;
STRINGSQL = STRINGSQL || ‘ FROM LIGACOES’;
STRINGSQL = STRINGSQL || ‘ WHERE TIPO = ‘ || ”” || ‘SAÍDA’ || ””;
STRINGSQL = STRINGSQL || ‘ AND DATA =’ || ”” || :LODATA || ”” || ‘ AND’;
STRINGSQL = STRINGSQL || ‘ (HORA >= ‘ || ”” || (:LOHORA - (5 * 60)) || ”” || ‘ ) AND’;
STRINGSQL = STRINGSQL || ‘ (HORA <= ‘ || ”” || (:LOHORA + (20 * 60)) || ”” || ‘ ) AND’;
STRINGSQL = STRINGSQL || ‘ (’;
/* O SUBSTR COMEÇA A CONTAR DO 0 ENTÃO COLOCAMOS 3 PARA PEGAR OS ULTIMOS 4 CARACTERES*/
STRINGSQL = STRINGSQL || ‘ RTRIM(NUMERO) LIKE ‘ || ”” || ‘%’ || SUBSTR(:LONUMERO,STRLEN(RTRIM(:LONUMERO)) - 3,STRLEN(RTRIM(:LONUMERO))) || ””; /*|| ‘%’ || ””;*/
STRINGSQL = STRINGSQL || ‘) ORDER BY 3 DESC’;
FOR
EXECUTE STATEMENT STRINGSQL INTO :CODIGORAMAL, :DATA, :HORA, :DURACAO, :NUMERO
DO
BEGIN
STRINGSQL2 = ‘UPDATE LIGACAO’;
STRINGSQL2 = STRINGSQL2 || ‘ SET PABX = ‘ || ”” || ‘ CÓD. RAMAL : ‘ || ”” || ”” || :CODIGORAMAL || ””
|| ”” || ‘ DATA : ‘ || ”” || ”” || EXTRACT(DAY FROM :DATA) || ‘/’ || EXTRACT(MONTH FROM :DATA) || ‘/’ || EXTRACT(YEAR FROM :DATA) || ””
|| ”” || ‘ HORA : ‘ || ”” || ”” || EXTRACT(HOUR FROM :HORA) || ‘:’ || EXTRACT (MINUTE FROM :HORA) || ‘:’ || EXTRACT(MINUTE FROM :HORA) || ””
|| ”” || ‘ NUMERO :’ || ”” || ”” || :NUMERO || ””
|| ”” || ‘ DURAÇÃO : ‘ ||”” || ”” || EXTRACT(HOUR FROM :DURACAO) || ‘:’ || EXTRACT (MINUTE FROM :DURACAO) || ‘:’ || EXTRACT(MINUTE FROM :DURACAO) || ””;
STRINGSQL2 = STRINGSQL2 || ‘ WHERE DATA =’ || ”” || :LODATA || ”” || ‘ AND HORA =’ || ”” || :LOHORA || ”” || ‘ AND NUMERO LIKE ‘ || ”” || ‘%’ || SUBSTR(:LONUMERO,STRLEN(RTRIM(:LONUMERO)) - 3,STRLEN(RTRIM(:LONUMERO))) || ””; /*|| ‘%’ || ””;*/
EXECUTE STATEMENT STRINGSQL2;
END
END
suspend;
end
Tags: Firebird
