Название: [РЕШЕНО] Хранимые процедуры PostgreSQL Отправлено: sergek от Январь 24, 2015, 19:59 Коллеги,
подскажите, в какой мере Qt поддерживает хранимые процедуры PostgreSQL? Нужно получить из хранимой процедуры запись или таблицу. Например, хочется так: Код: create table WAnswer Код: QSqlQuery answQuery(db); С таблицей еще хуже. При вызове такой процедуры: Код: CREATE OR REPLACE FUNCTION selGroupFunctions(integer) Как это можно сделать встроенными средствами Qt? Или придется использовать libpq? Название: Re: Хранимые процедуры PostgreSQL Отправлено: Johnik от Январь 24, 2015, 20:18 SELECT selAnswer(:requestId) Проверять сейчас нечем, но если не ошибаюсь, то синтаксис чуть другой в постгре должен быть:при селекте из функции, которая возвращает record, должно быть перечисление столбцов: Код: SELECT * FROM selAnswer(:requestId) as (col_name_1 type_of_col_1, ..., col_name_N type_of_col_N) Код: SELECT * FROM selAnswer(:requestId) Название: Re: Хранимые процедуры PostgreSQL Отправлено: vbv от Январь 24, 2015, 20:49 Поля нумеруются с 0 а не с 1.
т.о value(0) у вас возвращается одно значение. Все остальное верно. И еще в psql SELECT selAnswer(<тут реальное значение>); вернет ли чего-то. Но я думаю, что у Вас next таки возвращает один раз true но ничего не печатается т.к. см. начало моего поста. И по поводу второго запроса. там таки да нужно вызов функции пихать в предложение from но это Вам уже написали. PS: Тут вопрос не к QT а к postgresql - читаем мануал по postgresql. Название: Re: Хранимые процедуры PostgreSQL Отправлено: sergek от Январь 24, 2015, 21:06 Проверять сейчас нечем, но если не ошибаюсь, то синтаксис чуть другой в постгре должен быть: Спасибо, добрый человек! Все верно в отношении и record, и table, работает. Более того, работает даже именование полей:Код: groupVars.groupId = answQuery.value(answRec.indexOf("groupId")).toInt(); Поля нумеруются с 0 а не с 1. Да я знаю, мне первое поле не нужно;))Название: Re: [РЕШЕНО] Хранимые процедуры PostgreSQL Отправлено: vbv от Январь 24, 2015, 21:09 Но функция из select всегда возвращает одно значение(поле)!!!
И это иногда бывает нужно, лично сталкивался. Название: Re: [РЕШЕНО] Хранимые процедуры PostgreSQL Отправлено: sergek от Январь 24, 2015, 21:40 Но функция из select всегда возвращает одно значение(поле)!!! Понял свою ошибку.И это иногда бывает нужно, лично сталкивался. Название: Re: [РЕШЕНО] Хранимые процедуры PostgreSQL Отправлено: sergek от Январь 24, 2015, 23:51 Окончательный вариант с использованием SETOF:
Код: CREATE FUNCTION selAnswer(integer) RETURNS SETOF WAnswer AS $$ Код: QSqlQuery answQuery(db); |