Я испытываю неожиданное поведение на Postgres 9.0.4 при использовании pl / pgsql, касающемся выбора из функции, которая возвращает ROWTYPE в переменную ROWTYPE из другой функции.В приведенном ниже примере I:
- Создайте таблицу TESTTABLE и вставьте строку.
- Создайте функцию FN_TEST_GET_ROW, которая возвращает строку ROWTYPE TESTTABLE на основе выбора одной строки изTESTTABLE
- Создание тестового жгута в форме функции TESTX, которая вызывает FN_TEST_GET_ROW с ID = 1
- Вызов тестового жгута
Ошибка, показанная ниже, возвращаетсянеожиданно ОШИБКА: неверный синтаксис ввода для целого числа: "(1, Фред)"
Я бы просто ожидал, что будут возвращены значения (1, Фред), что и произойдет, если я выполню
SELECT fn_test_get_row(1);
напрямую.
Создать таблицу:
CREATE TABLE testtable
(
id INTEGER,
name VARCHAR(10)
);
Добавить данные:
INSERT INTO testtable (id, name) VALUES (1, 'Fred');
Создать функцию:
CREATE OR REPLACE FUNCTION fn_test_get_row(a INTEGER)
RETURNS testtable AS $$
DECLARE
i_row testtable;
BEGIN
SELECT *
INTO i_row
FROM testtable
WHERE id = a;
-- Success
RETURN i_row;
END;
$$ LANGUAGE plpgsql;
Создать тестовую функцию:
CREATE OR REPLACE FUNCTION testx()
RETURNS testtable AS $$
DECLARE
i_row testtable;
BEGIN
SELECT fn_test_get_row(1)
INTO i_row;
-- Success
RETURN i_row;
END;
$$ LANGUAGE plpgsql;
Выполнить функцию теста:
select testx();
Ошибка вернулась:
ERROR: invalid input syntax for integer: "(1,Fred)"
CONTEXT: PL/pgSQL function "testx" line 8 at SQL statement
********** Error **********
ERROR: invalid input syntax for integer: "(1,Fred)"
SQL state: 22P02
Context: PL/pgSQL function "testx" line 8 at SQL statement