Обсуждение: Verifying data type
Hello guys,
I have a function like this
CREATE OR REPLACE FUNCTION "public"."f_tipo_campo" (varchar) RETURNS
numeric AS
'declare p_valor ALIAS FOR $1; v_resultado varchar;
begin v_resultado := 1;
<> return v_resultado;
<>end;
<><>' LANGUAGE 'plpgsql'
<>
<>
I need to verify if the data in p_valor is just number or it is a string.
What is the best way to do this?
Here is the original function in Oracle PL/SQL
create or replace function f_tipo_campo (p_valor varchar) return number is
v_resultado number;
v_number number;
begin
begin
select p_valor
into v_number from dual;
v_resultado := 0;
exception
when others then
v_resultado := 1;
end;
return v_resultado;
end;
/
show err
--
Elieser Leão
Sorry for my bad english...
Elieser Leão <elieser@nho.com.br> writes:
> I need to verify if the data in p_valor is just number or it is a string.
> What is the best way to do this?
In PG 8.0 you can just do it exactly the way your Oracle original does,
viz try to cram it into a numeric variable and catch the exception if
any.
In earlier versions, my thoughts would run to some kind of string
matching test using a regular expression.
The regexp method is probably significantly faster though, so maybe you
want to do it anyway, especially if you don't need the full generality
of possible floating-point formats. You might get away with something
as simple as "p_valor ~ '^[0-9]+$'" if you only care about unsigned
integer inputs.
regards, tom lane
Thanks, but the number may be a float, like '1.23,00', '12.323,00', '12,34'.... :(<br /> The regex works fine if it
justan integer...<br /><br /> Have some regex to "compare"?<br /><br /> Tom Lane wrote:<br /><blockquote
cite="mid18604.1092699055@sss.pgh.pa.us"type="cite"><pre wrap="">Elieser Leão <a class="moz-txt-link-rfc2396E"
href="mailto:elieser@nho.com.br"><elieser@nho.com.br></a>writes: </pre><blockquote type="cite"><pre wrap="">I
needto verify if the data in p_valor is just number or it is a string.
What is the best way to do this? </pre></blockquote><pre wrap="">
In PG 8.0 you can just do it exactly the way your Oracle original does,
viz try to cram it into a numeric variable and catch the exception if
any.
In earlier versions, my thoughts would run to some kind of string
matching test using a regular expression.
The regexp method is probably significantly faster though, so maybe you
want to do it anyway, especially if you don't need the full generality
of possible floating-point formats. You might get away with something
as simple as "p_valor ~ '^[0-9]+$'" if you only care about unsigned
integer inputs.
regards, tom lane
</pre></blockquote><br />