create or replace function add_tovar(integer, character varying, integer, integer, integer, character varying)
returns character as
$body$
declare g_id int;
tmp_tovar_id int;
begin
select id from shop_catalog where id=$1 into tmp_tovar_id;
if (tmp_tovar_id is null) then
return 'Net magazinov po zadannomu ID';
else
begin
select tovar_price from tovar where ((shop_id=$1) and (tovar_name=$2) and (maker_name=$6)) into tmp_tovar_id;
if (tmp_tovar_id is null) then
insert into tovar (shop_id, tovar_name, tovar_price, count_whs, count_sold_out, maker_name)
values($1,$2,$3,$4,$5,$6);
else
begin
update tovar set count_whs=count_whs+$4 where tovar_name=$2;
end;
end if;
select currval('tovar_id_seq') into g_id;
perform add_log_message('tovar "' || $2 || '" dobavlen po id ' || g_id);
return 'Tovar dobavlen';
end;
end if;
end
$body$
language plpgsql volatile
cost 100;
alter function add_tovar (integer, character varying, integer, integer, integer, character varying) owner to postgres;
grant execute on function add_tovar(integer, character varying, integer, integer, integer, character varying) to public;
grant execute on function add_tovar(integer, character varying, integer, integer, integer, character varying) to postgres;
grant execute on function add_tovar(integer, character varying, integer, integer, integer, character varying) to dboperator;
Добавим товар krossovki, производителя nike в магазин с индексом 2, ценой 1200, количеством на складе 25 и количеством уже проданных — 6. (количество проданных не равно 0, чтобы было легче выполнять дальнейшие запросы. Можно не вводить количество проданных товаров, оно автоматически запишется как ноль).
select add_tovar(2,'krossovki',1200,25,6,'nike');
Попробуем добавить товар в несуществующий магазин:
select add_tovar(14,'krossovki', 1200,25,6,'nike');
Создание функции удаления товара из таблицы tovar:
Удаление, если этот товар ни разу не был продан.
create or replace function remove_tovar(integer)
returns character as
$body$
declare tmp_id int;
begin
select id from tovar where id=$1 into tmp_id;
if (tmp_id is null) then
return 'Ne nayden tovar po zadannomu id';
else
begin
delete from tovar where id=$1;
select currval('shop_catalog_id_seq') into tmp_id;
perform add_log_message('udaleno po id ' || tmp_id);
return 'Tovar udalen';
end;
end if;
end
$body$
language plpgsql volatile
cost 100;
alter function remove_tovar(integer) owner to postgres;
grant execute on function remove_tovar(integer) to public;
grant execute on function remove_tovar(integer) to postgres;
grant execute on function remove_tovar(integer) to dboperator;
select remove_tovar(3);
Попробуем удалить товар, который уже был когда-то продан:
select remove_tovar(1);
Ошибка!
Создание функции добавления информации о продаже.
При добавлении информации о продаже, автоматически заполняется таблица с информацией о каждом покупателе.
create or replace function add_sold_out(integer, integer, integer, integer, timestamp without time zone)
returns character as
$body$
declare b_id int;
tmp_shop_id int;
tmp_tovar_id int;
tmp_tovar_count int;
tmp_tovar_price int;
tmp_bill int;
tmp_bill_1 int;
tmp_buyer_id int;
tmp_bool boolean;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.