BUG #12273: CASE Expression BUG

Поиск
Список
Период
Сортировка
От jaksits.tibor@gmail.com
Тема BUG #12273: CASE Expression BUG
Дата
Msg-id 20141218144436.1237.96696@wrigleys.postgresql.org
обсуждение исходный текст
Ответы Re: BUG #12273: CASE Expression BUG
Список pgsql-bugs
The following bug has been logged on the website:

Bug reference:      12273
Logged by:          Tibor Jaksits
Email address:      jaksits.tibor@gmail.com
PostgreSQL version: 9.3.4
Operating system:   Linux Debian 64-bit 4.7.2-5
Description:

I created a simple function that returns the number received parameter.


CREATE OR REPLACE FUNCTION __is_numeric_test(a_double_param double
precision)
  RETURNS double precision AS
$BODY$DECLARE
BEGIN
  RETURN a_double_param;
END;$BODY$
  LANGUAGE plpgsql VOLATILE;

I created two other functions:

CREATE OR REPLACE FUNCTION __is_numeric_test_work(a_text_param text)
  RETURNS double precision AS
$BODY$DECLARE
BEGIN

  RETURN __is_numeric_test((CASE WHEN is_numeric(a_text_param) THEN
a_text_param::double precision ELSE 0.0::double precision END));

END;$BODY$
  LANGUAGE plpgsql VOLATILE;


CREATE OR REPLACE FUNCTION __is_numeric_test_does_not_work(a_text_param
text)
  RETURNS double precision AS
$BODY$DECLARE
  ret double precision;
BEGIN

  SELECT __is_numeric_test
    INTO ret
    FROM __is_numeric_test((CASE WHEN is_numeric(a_text_param) THEN
a_text_param::double precision ELSE 0.0::double precision END));

  RETURN ret;

END;$BODY$
  LANGUAGE plpgsql VOLATILE;


The return value of the "SELECT * FROM __is_numeric_test_work('')" query is
0 (correct operation)


But the query "SELECT * FROM __is_numeric_test_does_not_work('')" I get an
error message:


invalid input syntax for type double precision: ""
CONTEXT:  SQL statement "SELECT __is_numeric_test
                 FROM __is_numeric_test((CASE WHEN is_numeric(a_text_param)
THEN a_text_param::double precision ELSE 0.0::double precision END))"
PL/pgSQL function __is_numeric_test_does_not_work(text) line 5 at SQL
statement

********** Error **********

ERROR: invalid input syntax for type double precision: ""
SQL state: 22P02
Context: SQL statement "SELECT __is_numeric_test
                 FROM __is_numeric_test((CASE WHEN is_numeric(a_text_param)
THEN a_text_param::double precision ELSE 0.0::double precision END))"
PL/pgSQL function __is_numeric_test_does_not_work(text) line 5 at SQL
statement

В списке pgsql-bugs по дате отправления:

Предыдущее
От: not-available@somewhere.com
Дата:
Сообщение: BUG #12269: small incosistency in pg_dump and pg_dumpall dumps
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Create into temp table as select doesn set "found"