Создал таблицу в которой 16 полей из них 12 - это название месяцев на английском.
Уже 4 час бьюсь, мануал читаю, английские форумы листаю, нигде похожей проблемы не нашел.
В краце ситуация следующая: приходит информация в базу с датой и итоговой стоимостью и прочими 4 полями, с которыми проблем нет.
1)Необходимо вычленить название месяца из даты. Это сделал to_char(NEW.sell_cart_date, 'fmmonth'), чтобы указать как-то, что будем менять столбец с этим названием месяца.
2)Записать в столбец с названием полученного месяца информацию, путем отнимания старого значения стоимости и прибавлением нового(это если апдейт к примеру пришел, а не инсерт).
Наваял такой код, но он не работает из-за косяков с автоподстановкой месяца в названии столбца:
DECLARE
months varchar;
oldmonth varchar;
monthprice integer;
BEGIN
months = to_char(NEW.sell_cart_date, 'fmmonth');
oldmonth = to_char(OLD.sell_cart_date, 'fmmonth');
monthprice = select months from month_salesman where userid = NEW.sell_cart_seller_id AND year = EXTRACT(YEAR FROM NEW.sell_cart_date) AND type = 'tabako';
IF (TG_OP = 'UPDATE') THEN
UPDATE month_salesman SET month_salesman.months = monthprice + NEW.sell_cart_price_tabako WHERE userid = NEW.sell_cart_seller_id AND year = EXTRACT(YEAR FROM NEW.sell_cart_date) AND type = 'tabako';
END IF;
RETURN NULL;
END;
Но в этом коде, как я понимаю, не работает ни присвоение месяца, соответственно потом и выборка не присвается. Ну и как итог, новое значение не пишется. Так как ошибка.
Как правильно подставлять значение в название столбцов?(так сказать вычислять их)
1. Динамический sql поможет с
1. Динамический sql поможет с определением инструкции для изменения данных - https://www.postgresql.org/docs/9.1/static/ecpg-sql-execute-immediate.html.
2. Использовать 12 подфункций.
3. Не использовать подобную архитектуру.
4. Ну и по поводу потенциальных проблем https://ru.wikipedia.org/wiki/%D0%A3%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C...
Вот ведь не случайно при
Вот ведь не случайно при входе на форум выведена большая надпись красными буквами на жёлтом фоне - ЧИТАЙТЕ FAQ!!!
Там есть два вопроса на сходную тему:
http://postgresql.ru.net/docs/extented_FAQ.html#Q003
http://postgresql.ru.net/docs/extented_FAQ.html#Q004