Я работаю в Postgres, и мне нужно отправить полный набор результатов со множеством строк и столбцов в хранимую процедуру или функцию. Это возможно? Если да, где я могу найти ресурсы для синтаксиса?
Хорошо, это то, как я настроил его, не имея возможности отправлять набор результатов, это заставляет меня нарушить логику сравнения и поместить его в два разных места, однако моя цель - сохранить фактическое нахождение логики продвижения в одном месте, что я сделал здесь. Это может измениться однажды, логика сравнения менее вероятно изменится, она довольно стандартна.
Логика рекламной позиции
- В INSERT будут установлены триггеры для таблиц promo_objects, promo_buy_objects и promo_get_objects, в промо-таблице будет триггер UPDATE.
Триггер для внешних ссылок вызовет хранимую процедуру set_best_product_promos, которая определит, какое продвижение лучше для этого объекта, и затем сохранит в новую таблицу:
promo_best_product_promos
promo_id,
object_id,
expiration_date
- Триггер для промо вызовет update_best_product_promos и отправит promo_id, и если active = true, он обновит дату истечения срока для этого промо, иначе он удалит все записи для этого промо
Новая таблица была добавлена в сценарий promo.sql, однако триггеры и функцию нельзя добавить до тех пор, пока функция не будет написана.
Сценарий будет запускаться каждую ночь в полночь для удаления записей, срок действия которых истек.
PSEUDO FOR код корзины (код приложения)
Запустите запрос на объединение так же, как мы теперь показываем_объект_промоции (получаются все доступные акции для элемента)
Loop through results
if buy_quantity > 0
IF the quantity of the buy item in the cart is greater than or = the buy_quantity (I think c.active_items is the items in the cart)
IF get_quantity > 0
If the get item is in the cart AND it is the item sent into this function (I think c.active_items is the items in the cart)
run the get_best_product_promos function
run comparison logic
else
run the get_best_product_promos function
run comparison logic
РЕДАКТИРОВАТЬ: Итак, я думаю, я мог бы также сбросить эту логику корзины в качестве хранимой процедуры, а затем создать одну для логики сравнения и использовать ее все в хранимых процедурах и в переносимых и универсальных?
PSEUDO FOR set_best_product_promos:
-You will send in the object_id and promo_id
-You will declare all of your variables
-Go ahead an query the end date of the promo
-You will then query the promo_best_product_promos table to see if an entry exists for this product
IF exists:
RUN YOUR UNION QUERY accept this time you will have to explicitly say all the fields you want and what variables to select them into
Then loop through your query
LOOP
run get_best_product_promos
run comparison logic
END LOOP
Now take those variables you set in the crazy logic and update promo_best_product_promos
ELSE:
insert the object_id, promo_id, and end date (expiration_date) into the promo_best_product_promos table
PSEUDO FOR get_best_product_promos:
If no buy and no get quantities
If discount type = percent
calculate value of the promotion for this item to compare later
calculate the new price for the product and update the estimated unit price
If discount type = dollar
calculate value of the promotion for this item to compare later
calculate the new price for the product and update the estimated unit price
If discount type = price
calculate value of the promotion for this item to compare later
calculate the new price for the product and update the estimated unit price
If discount amount = Free
do nothing
pass
If buy quantity but no get quantity
If discount type = percent
calculate value of the promotion for this item to compare later
If discount type = dollar
calculate value of the promotion for this item to compare later
If discount type = price
calculate value of the promotion for this item to compare later
If discount amount = Free
do nothing
pass
Else (assumes there is both buy and get)
IF the quantity of the buy item in the cart is >= the buy_quantity (I think c.active_items is the items in the cart)
If discount type = percent
calculate value of the promotion for this item to compare later
If discount type = dollar
calculate value of the promotion for this item to compare later
If discount type = price
calculate value of the promotion for this item to compare later
If discount amount = Free
#Use a different var here like in select_cart_promotion - they will always get this promotion
calculate the value of the promotion for these items
do something here to ensure the get product is in the cart