kvn
programmer
CREATE FUNCTION/TRIGGER
Предистория:
Есть две иаблицы owe - долги, и payments - пролаты.
owe:
id, uid, cost, date
payments:
id, uid, uah, date
и users:
uid, name.
Для того чтобы подсчитывать account of user (UID) написал ф-цию:
CREATE FUNCTION calc_account(int4) RETURNS float4 AS 'SELECT float4((SELECT sum(uah)/100.00 FROM payments WHERE uid = $1)-(SELECT sum(cost) FROM owe WHERE uid = $1));' LANGUAGE 'sql';
Но, ситуация такова, что если в таблице owe, или payments НЕТ записи о UID, т.е. empty set, то ф-ция возвращает тоже пустое значение.
Например: В таблице owe есть запись о том, что UID должен cost=100 WHERE uid = UID.
А в payments еще ничего нет, т.е. он не платил.
SELECT calc_account(UID) возвращает ПУСТО, но если в табличке payments будет 0, то все ОК.
ВОПРОС №1:
Как БОЛЕЕ правильно написать ф-цию calc_account(), чтобы она правильно отражала действительность?
ИЛИ:
Как сделать триггер на users, чтобы при инсерте, этот триггер добавлял в обе таблички нули, для данного UID.
П.С. При 0-вых значениях в обоих табличках все правильно работает.
Спасибо.
Предистория:
Есть две иаблицы owe - долги, и payments - пролаты.
owe:
id, uid, cost, date
payments:
id, uid, uah, date
и users:
uid, name.
Для того чтобы подсчитывать account of user (UID) написал ф-цию:
CREATE FUNCTION calc_account(int4) RETURNS float4 AS 'SELECT float4((SELECT sum(uah)/100.00 FROM payments WHERE uid = $1)-(SELECT sum(cost) FROM owe WHERE uid = $1));' LANGUAGE 'sql';
Но, ситуация такова, что если в таблице owe, или payments НЕТ записи о UID, т.е. empty set, то ф-ция возвращает тоже пустое значение.
Например: В таблице owe есть запись о том, что UID должен cost=100 WHERE uid = UID.
А в payments еще ничего нет, т.е. он не платил.
SELECT calc_account(UID) возвращает ПУСТО, но если в табличке payments будет 0, то все ОК.
ВОПРОС №1:
Как БОЛЕЕ правильно написать ф-цию calc_account(), чтобы она правильно отражала действительность?
ИЛИ:
Как сделать триггер на users, чтобы при инсерте, этот триггер добавлял в обе таблички нули, для данного UID.
П.С. При 0-вых значениях в обоих табличках все правильно работает.
Спасибо.