Fórum Procedure para tratar mudança de virgula por ponto firebird #59608

28/03/2008

0

Estou tentando criar uma procedure para trocar virgula por ponto dentro do banco de dados, tentei assim:

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

Marbravo

Responder

Posts

28/03/2008

Edilcimar

eu nunca tentei criar dentro do banco de dados, sempre faço no onkeypress, faço uma transformação, se o usuário pressiona a vírgula, eu a transformo em um ponto!


Responder

Gostei + 0

29/03/2008

Marbravo

Eu preciso dentro do Banco de dados....
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,


Responder

Gostei + 0

09/04/2008

Marbravo

up


Responder

Gostei + 0

06/05/2008

Marbravo

CREATE PROCEDURE TROCAPONTOVIR_CADPROD (
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+


Responder

Gostei + 0

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

Aceitar