Thread: Verifying data type

Verifying data type

From
Elieser Leão
Date:
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...





Re: Verifying data type

From
Tom Lane
Date:
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


Re: Verifying data type

From
Elieser Leão
Date:
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 />