Хранимая функция SQL - PullRequest
       5

Хранимая функция SQL

1 голос
/ 25 августа 2011

Я должен написать хранимую функцию, чтобы получить количество товаров данного товара, которые были поставлены в прошлом году, и написать оператор SQL Select, который использует функцию для отображения номера товара и имени + количества доставленных товаров. в прошлом году на все товары.

Пожалуйста, помогите мне

Спасибо

Ответы [ 2 ]

3 голосов
/ 25 августа 2011

Предположительно, ваш вопрос вызван заданием школы или колледжа. По крайней мере, я на это надеюсь, потому что использование функции для этой цели - плохая практика. Он работает плохо из-за постоянного переключения между механизмами SQL и PL / SQL, а также потому, что он запрашивает доставку построчно, а не с помощью операции set.

Простой оператор чистого SQL работает лучше. Я решил использовать внешнее объединение, потому что вы, вероятно, хотите включить продукты, которые не были активны в прошлом году.

select p.product_id
       , p.product_name
       , count(d.delivery_id) as sales_this_year 
from products p
    left outer join deliveries d
         on (p.product_id = d.product_id)
where d.dispatch_date >= add_months(sysdate, -12)
group by p.product_id, p.product_name
/

Я истолковал «в прошлом году» как обозначение последних двенадцати месяцев, поэтому я использовал функцию ADD_MONTHS (). В другой интерпретации предложение WHERE будет выглядеть так:

where d.dispatch_date between to_date('01-JAN-2010') and to_date('31-DEC-2010')

это последний календарный год; или возможно:

where d.dispatch_date >= trunc(sysdate, 'YYYY')

то есть этот календарный год.

2 голосов
/ 25 августа 2011

Полагаю, у вас есть таблица доставки и таблица продуктов.

create or replace function prod_delivered_cnt (p_prod_id in number) as
  v_res number;
begin
  select count(*) into v_res 
  from delivery_table d 
  where d.prod_id = p_prod_id 
  and d.date < to_date('2011', 'yyyy');
  return v_res;
end prod_delivered_cnt;

select p.prod_num, p.prod_name, prod_delivered_cnt(p.id) as cnt 
from product_table p;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...