Verifying data type

Verifying data type

am 16.08.2004 23:16:12 von elieser

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...




---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org

Re: Verifying data type

am 17.08.2004 01:30:55 von tgl

=?ISO-8859-1?Q?Elieser_Le=E3o?= 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

---------------------------(end of broadcast)---------------------------
TIP 7: don't forget to increase your free space map settings

Re: Verifying data type

am 17.08.2004 15:48:49 von elieser

This is a multi-part message in MIME format.
--------------020907070702010305060405
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Thanks, but the number may be a float, like '1.23,00', '12.323,00',
'12,34'.... :(
The regex works fine if it just an integer...

Have some regex to "compare"?

Tom Lane wrote:

>=?ISO-8859-1?Q?Elieser_Le=E3o?= 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
>
>
>


--------------020907070702010305060405
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit










Thanks, but the number may be a float, like '1.23,00', '12.323,00',
'12,34'.... :(

The regex works fine if it just an integer...



Have some regex to "compare"?



Tom Lane wrote:


=?ISO-8859-1?Q?Elieser_Le=E3o?= 
 class="moz-txt-link-rfc2396E" href="mailto:elieser@nho.com.br"><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








--------------020907070702010305060405--