BUG #1370: Problem with arrays in PL/PGSQL

Поиск
Список
Период
Сортировка
От David Bowen
Тема BUG #1370: Problem with arrays in PL/PGSQL
Дата
Msg-id 200501030311.j033B5bM021078@developer.pgadmin.org
обсуждение исходный текст
Ответы Re: BUG #1370: Problem with arrays in PL/PGSQL  (Michael Fuhr <mike@fuhr.org>)
Список pgsql-bugs
The following bug has been logged online:

Bug reference:      1370
Logged by:          David Bowen
Email address:      dmb0317@frontiernet.net
PostgreSQL version: 8.0
Operating system:   Fedora Core 2/Athlon 950 processor
Description:        Problem with arrays in PL/PGSQL
Details:

PostgreSQL 8.0.0rc2

test=# \d scores
        Table "public.scores"
    Column     |  Type   | Modifiers
---------------+---------+-----------
 contestant_id | integer |
 category      | integer |
 score         | integer |

test=# select * from scores;
 contestant_id | category | score
---------------+----------+-------
             1 |        1 |    70
             1 |        2 |    73
             1 |        3 |    69
             2 |        1 |    72
             2 |        2 |    70
             2 |        3 |    73
             3 |        1 |    66
             3 |        2 |    75
             3 |        3 |    72
(9 rows)

test=# \i /home1/dmb/crosstab
CREATE FUNCTION
test=# select crosstab(1);
ERROR:  array value must start with "{" or dimension information
CONTEXT:  PL/pgSQL function "crosstab" line 5 at block variables
initialization
$ cat /home1/dmb/crosstab
CREATE OR REPLACE FUNCTION crosstab (integer) RETURNS integer[] AS '
DECLARE
contestant ALIAS FOR $1;
row scores%ROWTYPE;
s integer[3]:= (-1,-1,-1);
BEGIN
FOR row IN SELECT * FROM scores where contestant_id = contestant LOOP
s[row.category] := row.score;
END LOOP;
RETURN s;
END;
' LANGUAGE 'PLPGSQL';

Changing
s integer[3]:= (-1,-1,-1);
to
s integer[3]:= {-1,-1,-1};

test=# \i /home1/dmb/crosstab
CREATE FUNCTION
test=# select crosstab(1);
ERROR:  syntax error at or near "{" at character 9
QUERY:  SELECT  {-1,-1,-1}
CONTEXT:  PL/pgSQL function "crosstab" line 5 at block variables
initialization
LINE 1: SELECT  {-1,-1,-1}
                ^
Changing to
s integer[3];
test=# \i /home1/dmb/crosstab
CREATE FUNCTION
test=# select crosstab(1);
 crosstab
----------

(1 row)

gdb shows exec_assign_value returning at line 3137 because oldarrayisnull is
TRUE, so s never gets assigned. If you need additional information, ask and
ye shall receive.

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

Предыдущее
От: "Elvis E. Henriquez A."
Дата:
Сообщение: Wrong messages running on Windows - Part 2
Следующее
От: moje
Дата:
Сообщение: Tsearch2 ispell parser unicode bug ?