powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / HELP: возврат разнородных данных из хранимой процедуры
4 сообщений из 4, страница 1 из 1
HELP: возврат разнородных данных из хранимой процедуры
    #33632115
Evgeny Bronnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Есть процедура на Си (в модуле .so), возвращающая несколько значений: TEXT, INT32 и опять TEXT (всего 3).

Объявляю функцию как:
Код: plaintext
1.
2.
CREATE OR REPLACE FUNCTION func1(INTEGER, INTEGER, INTEGER) RETURNS RECORD
AS '$libdir/module_name', 'func1' LANGUAGE 'C';
Как видно - объявил ее возвращающую тип RECORD.

Далее делаю еще одну процедуру, в которой пытаюсь вызвать эту:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE OR REPLACE FUNCTION func2(param INTEGER) RETURNS table_name AS $$
DECLARE
 result RECORD
BEGIN
 SELECT * FROM func1( 1 ,  2 ,  3 ) AS (f1 TEXT, f2 INTEGER, f3 TEXT) INTO result;
 -- тут хотел бы работать с переменной result (result.f1 и тп)
END;
$$ LANGUAGE plpgsql;
При вызове возникает ошибка:
ERROR: cache lookup failed for type 540090418

Пробовал уже по разному делать - ничего не получается. Можно по идее сделать чтобы из сишной функции возвращался SETOF TEXT, а потом кастить второе поле из TEXT в INTEGER, но я не знаю как кастить.
Подскажите пожалуйста как нужно делать.
...
Рейтинг: 0 / 0
HELP: возврат разнородных данных из хранимой процедуры
    #33633005
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
32.9.9. Returning Rows (Composite Types) from C-Language Functions
Если ты так и делал, тогда хз.
...
Рейтинг: 0 / 0
HELP: возврат разнородных данных из хранимой процедуры
    #33633341
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эээ. Не знаю как там в Си, но ф-ция объявлена как вовращающая ОДНО значение, пусть даже и RECORD:
Evgeny Bronnikov
CREATE OR REPLACE FUNCTION func1(INTEGER, INTEGER, INTEGER) RETURNS RECORD

А вытягивать из неё ты пытаешься рекордсет
Evgeny Bronnikov
SELECT * FROM func1 (1, 2, 3) AS (f1 TEXT, f2 INTEGER, f3 TEXT) INTO result;

Что если просто так:
result = SELECT func1('1', 2, '3');
...
Рейтинг: 0 / 0
HELP: возврат разнородных данных из хранимой процедуры
    #33634150
Evgeny Bronnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал немного по другому: возвращаю SETOF TEXT, а потом делаю каст 2-го возвращаемого значения в INT. Вроде работает, так что оставил..
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / HELP: возврат разнородных данных из хранимой процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]