Создать запросы

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Ответить
Nuc
Сообщения: 1
Зарегистрирован: 19 фев 2018, 18:00

Создать запросы

Сообщение Nuc » 19 фев 2018, 18:12

Добрый вечер, уважаемые знатоки. Помогите пожалуйста с задачей(одна задача) на SQL Oracle:
5.1.2. При помощи курсора выбрать товары с ценой более 1000 рублей и в случае, если на этот товар не было заказов, уменьшить его цену на 5%. Список товаров, с измененной ценой вывести на экран, а в таблице PRICELIST_LINES к их названию добавить '*'.

5.1.3. Сделать предыдущее задание с использованием курсорного цикла FOR, но добавив еще дополнительное условие: на 5% должна быть уменьшена цена только десяти наиболее дорогим товарам, а остальным цена должна быть снижена на 4%.
Я тут написал код к этим задачам:
--5.1.2
SET SERVEROUTPUT ON
DECLARE
CURSOR C_TOV IS
SELECT MANUFACTURER,CODE,PRICE FROM PRODUCTS WHERE PRICE<1000;
TOV C_TOV%ROWTYPE;
N NUMBER;
BEGIN
FOR M IN C_TOV LOOP
SELECT COUNT(*) INTO N FROM ORDERS WHERE PRODUCT_MANUFACTURER=TOV.MANUFACTUR ER AND PRODUCT_CODE=TOV.CODE;
IF N=0 THEN
UPDATE PRODUCTS SET PRICE=0.95*PRICE WHERE MANUFACTURER=TOV.MANUFACTURER AND CODE=TOV.CODE;
UPDATE PRICELIST_LINES SET PRODUCT_PRICE=0.95*PRODUCT_PRICE,PR ODUCT_CODE=PRODUCT_CODE||'*' WHERE PRODUCT_CODE=TOV.MANUFACTURER||'_'| |TOV.CODE;
END IF;
END LOOP;
END;
/
ROLLBACK;

---5.1.3
SET SERVEROUTPUT ON
DECLARE
N NUMBER;
C NUMBER;
CD VARCHAR2(4 CHAR);
PR NUMBER;
BEGIN
C:=0;
FOR TOV IN (SELECT MANUFACTURER,CODE FROM PRODUCTS WHERE PRICE<1000)
LOOP
SELECT COUNT(*) INTO N FROM ORDERS WHERE PRODUCT_MANUFACTURER=TOV.MANUFACTUR ER AND PRODUCT_CODE=TOV.CODE;
IF N=0 THEN
IF C<11 THEN
BEGIN
SELECT CODE,PRICE INTO CD,PR FROM PRODUCTS WHERE TOV.MANUFACTURER=MANUFACTURER AND TOV.CODE=CODE AND PRICE<1000 ORDER BY PRICE DESC;
UPDATE PRODUCTS SET PRICE=0.95*PRICE WHERE MANUFACTURER=TOV.MANUFACTURER AND CODE=CD;
UPDATE PRICELIST_LINES SET PRODUCT_PRICE=0.95*PRODUCT_PRICE,PR ODUCT_CODE=PRODUCT_CODE||'*' WHERE PRODUCT_CODE=TOV.MANUFACTURER||'_'| |TOV.CODE;
C:=C+1;
END;
ELSE
BEGIN
SELECT CODE,PRICE INTO CD,PR FROM PRODUCTS WHERE TOV.MANUFACTURER=MANUFACTURER AND TOV.CODE=CODE AND PRICE<1000 ORDER BY PRICE DESC;
UPDATE PRODUCTS SET PRICE=0.96*PRICE WHERE MANUFACTURER=TOV.MANUFACTURER AND CODE=CD;
UPDATE PRICELIST_LINES SET PRODUCT_PRICE=0.96*PRODUCT_PRICE,PR ODUCT_CODE=PRODUCT_CODE||'*' WHERE PRODUCT_CODE=TOV.MANUFACTURER||'_'| |TOV.CODE;
DBMS_OUTPUT.PUT_LINE('*');
C:=C+1;
END;
END IF;
END IF;
END LOOP;
END;
/
SHOW ERRORS;
ROLLBACK;
Как с помощью курсора, записать запрос 5.1.3? и есть ли ошибки? то скажите какие?

Ответить