Я сделал процедуру для отображения наивысших и наименее популярных предметов за определенное время определенной даты. Процедура работает без ошибок или исключений, и каждая вещь функционирует. Как вы можете видеть, запросы повторяются дважды с целью показа первой записи на элементах, но единственные различия заключаются в порядке (ASC и DESC)! Есть ли способ уменьшить количество кода? Как я могу показать наивысшие и самые младшие элементы в одном запросе, а не два? Я хочу только сделать код аккуратным и удобным для чтения. Любая помощь приветствуется.Самый высокий/самый низкий pl/sql
CREATE OR REPLACE PROCEDURE highest_lowest(param IN DATE)
AS
v_pno_low NUMBER(5);
v_pno_high NUMBER(5);
BEGIN
SELECT item_no INTO v_pno_low
FROM (
SELECT
items.item_no,
sum(items.quantity) AS total,
to_char(prodcution_d, 'dd-mm-yyyy') AS pro_date
FROM items
JOIN parts ON parts.serial_no = items.serial_no
GROUP BY item_no, to_char(prodcution_d, 'dd-mm-yyyy')
ORDER BY sum(items.quantity) ASC)
WHERE rownum = 1
AND pro_date = to_char(param_date, 'mm-yyyy');
dbms_output.put_line('LOWEST ITEM: ' || v_pno_low);
SELECT item_no INTO v_pno_low
FROM (
SELECT
items.item_no,
sum(items.quantity) AS total,
TO_CHAR(prodcution_d, 'dd-mm-yyyy') AS pro_date
FROM items
JOIN parts ON parts.serial_no = items.serial_no
GROUP BY item_no, to_char(prodcution_d, 'dd-mm-yyyy')
ORDER BY SUM(items.quantity) DESC)
WHERE rownum = 1
AND pro_date = to_char(param_date, 'mm-yyyy');
dbms_output.put_line('HIGHEST POPULAR ITEM: ' || v_pno_high);
END;
/
Ваш код хорош и доступен для чтения. Здесь нет необходимости в чрезмерном использовании. – Mxsky
Благодарим вас за ответ. Я думал об уменьшении количества кодирования :) –
Я голосую, чтобы закрыть этот вопрос как не по теме, потому что этот вопрос будет более уместным на http://codereview.stackexchange.com –