Fórum Procedure para tratar mudança de virgula por ponto firebird #59608
28/03/2008
0
CREATE PROCEDURE SP_TROCAVIRPONTO ( VALOR VARCHAR(20)) RETURNS ( RETORNO VARCHAR(20)) AS DECLARE VARIABLE I INTEGER; DECLARE VARIABLE RESUL VARCHAR(20); DECLARE VARIABLE ENTRVALUE VARCHAR(20); begin i = 1; entrvalue = valor||´ ´; while (entrvalue[i] <> ´ ´) do begin if (entrvalue[i] = ´,´) then begin resul = resul || ´.´; end else begin resul = resul+entrvalue[i]; end i = i+1; end retorno = resul; suspend; end
só q dá um erro:
Invalid token. Dynamic SQL Error. SQL error code = -104. Invalid array reference.
como eu posso fazer essa procedure?
ou tem alguma outra solução para o meu problema?
agradeço desde já
sds,
Marbravo
Curtir tópico
+ 0Posts
28/03/2008
Edilcimar
Gostei + 0
29/03/2008
Marbravo
pq são varias consultas dentro de uma procedure e no final e inserido um registro na tabela, ao inserir dava o problema por isso preciso fazer q converta de ´,´ para ´.´ para poder inserir corretamente.
Alguma dica?
alguem?
agradeço desde já...
sds,
Gostei + 0
09/04/2008
Marbravo
Gostei + 0
06/05/2008
Marbravo
INPREFERENCIA VARCHAR(15))
RETURNS (
REFERENCIA VARCHAR(15),
PRECO_VENDA VARCHAR(20),
PRECO_CUSTO VARCHAR(20))
AS
DECLARE VARIABLE I INTEGER;
DECLARE VARIABLE S VARCHAR(20);
DECLARE VARIABLE VPRECO_CUSTO VARCHAR(20);
DECLARE VARIABLE VPRECO_UNIT VARCHAR(20);
begin
S = ´´;
I = 0;
for select P.Referencia, P.preco_custo, P.Preco_venda from Cad_Produtos P where P.referencia = :inpReferencia into :Referencia, :VPreco_Custo, :Vpreco_Unit DO
while (I <= Strlen(:VPreco_Custo)) do
begin
if (SUBSTR(:VPreco_Custo,I,I) = ´,´) then
S = S || ´.´;
else
S = S || SUBSTR(:VPreco_Custo,I,I);
i = i+1;
end
Preco_Custo = S;
while (I <= Strlen(:Vpreco_Unit)) do
begin
if (SUBSTR(:Vpreco_Unit,I,I) = ´,´) then
S = S || ´.´;
else
S = S || SUBSTR(:Vpreco_Unit,I,I);
i = i+1;
end
preco_Venda = S;
Suspend;
end
tá ai... lembrando q deve-se declarar as UDF :
DECLARE EXTERNAL FUNCTION STRLEN
CSTRING(32767)
RETURNS INTEGER BY VALUE
ENTRY_POINT ´IB_UDF_strlen´ MODULE_NAME ´ib_udf´
e
DECLARE EXTERNAL FUNCTION SUBSTR
CSTRING(255),
SMALLINT,
SMALLINT
RETURNS CSTRING(255) FREE_IT
ENTRY_POINT ´IB_UDF_substr´ MODULE_NAME ´ib_udf´
A função retorna para min o preço de custo e venda de um produto.
t+
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)