Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / MaxDB. Объявление переменной в процедуре, которая возвращает курсор. Разве нельзя? / 4 сообщений из 4, страница 1 из 1
14.05.2006, 17:01
    #33725399
wDevil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MaxDB. Объявление переменной в процедуре, которая возвращает курсор. Разве нельзя?
Входные данные: ID_PAGE, ID_KEYWORD
Задача: получить список реклам для показа, на основе входных данных, учтя все необходимые условия. Сделать проплаты для выбранных реклам. Все это одним запросом.
В условии стоит вызов функции проплаты. Она просто вставляет записи в другую таблицу, точней в таблицу статистики и таблицу проплаты Т.е получается что-то вроде:
Код: plaintext
1.
2.
3.
4.
5.
SELECT ля-ля-ля,...
FROM ля-ля-ля,...
WHERE ля-ля AND
	pay(id_page,id_ляля)> 1  AND
        ...

Проблема в том, при выполнении запроса функция проплаты для каждой рекламы, удовлетворяющей всем условиям, вызывается более одного раза. Т.е получается, что статистка, что проплата для одной рекламы прописывается 2-3 раза. Видимо во время вполнения запроса условия проверяются не единожды для каждой записи. Решил это обойти реализовав все это либо функцией, либо процедурой. Так как у меня в результате может быть более одной записи, мне нужно чтобы возвращался курсор. В MaxDB, как я понял, курсор может возвращать только процедура. Но и тут не все гладко, а именно паходу нельзя объявлять переменые в процедуре, если объявлено что она возращает результат - курсор, по крайне мере что-то подобное вызывает ошибку:
Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE DBPROC hotels_of_town (IN zip CHAR( 5 ))
RETURNS CURSOR AS
$CURSOR = 'HOTEL_CURSOR';
VAR temp_var INT;
DECLARE :$CURSOR CURSOR FOR
SELECT * FROM mona.hotel WHERE zip = :zip;
Без VAR тож пробовал.
Документация у MAxDB оставляет желать лучшего и опыта у меня мало. Довольно часто не хватает просто примеров для этой БД. Может просто как-то иначе можно объявить переменные? Или какой-то иной выход? А так бы было все просто: объявил бы курсор, выбрал рекламы в него, которые нужно показать, далее FETCH INTO и в цикле сделал проплаты. Если решение очевидно и я ступил, ногами не пинать, ет мой первый более менее сложный проект с точки зрения БД, до этого был мускул и простейшие SELECT/INSERT/UPDATE :)
...
Рейтинг: 0 / 0
15.05.2006, 10:23
    #33726210
krom_2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MaxDB. Объявление переменной в процедуре, которая возвращает курсор. Разве нельзя?
Просмоторв 13, ответов 0. Че зырят... хоть бы ответили по делу.. бараны...

при чем пробелма то я б не сказл что из рук вон выходящая. Возникает коррелчция у меня и избавимтьяс от нее надо дак ведь ни одна жсволоч ответить не может... то то они умные аш глаза режит,а тут молчат....
...
Рейтинг: 0 / 0
15.05.2006, 11:25
    #33726415
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MaxDB. Объявление переменной в процедуре, которая возвращает курсор. Разве нельзя?
хамло
...
Рейтинг: 0 / 0
15.05.2006, 15:51
    #33727741
wDevil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MaxDB. Объявление переменной в процедуре, которая возвращает курсор. Разве нельзя?
Эт точна... А проблемку я решил.. правда другая возникла...
...
Рейтинг: 0 / 0
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / MaxDB. Объявление переменной в процедуре, которая возвращает курсор. Разве нельзя? / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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