Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Sql oracle Ввод нескольких товаров в один заказ - Oracle / 6 сообщений из 6, страница 1 из 1
11.12.2016, 20:40
    #39364506
Аня1705
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql oracle Ввод нескольких товаров в один заказ - Oracle
У меня есть таблица Товар(код, название,...) и Продажа(код_продажа, код_товар, ...). Мне надо написать процедуру, добавления товара в продажу, но в одной продаже может участвовать несколько позиций товара, т.е. заполнение таблицы может быть примерно таким (111,1123,..)
(111,1156,..) и т.д.
У меня получается это реализовать только с помощью двух разных процедур. Можно ли это совместить в одной?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
/*Добавляем товар и создаем продажу*/
CREATE OR REPLACE PROCEDURE prodaji_INSERT_WITHOUT
    (NAME_TOV VARCHAR2,CENA_PRODAJI INTEGER, KOLICHESTVO_TOV INTEGER)
    IS
    TOVAR INTEGER;
    USLUGA INTEGER;
    BEGIN
    SELECT KOD INTO TOVAR FROM TOVAR1
    WHERE NAZVANIE = NAME_TOV AND CENA_PRODAJ=CENA_PRODAJI;
    INSERT INTO PRODAJA1 (KOD_PRODAJA,KOD_TOVAR,KOLICHESTVO) VALUES (ID_PRODAJA.NEXTVAL,TOVAR,KOLICHESTVO_TOV);
    DBMS_OUTPUT.PUT_LINE('Товар добавлен');
END;
 
 
/*дополняем существующую продажу*/
CREATE OR REPLACE PROCEDURE prodaji_INSERT_DOPOLNIT_W
    (NAME_TOV VARCHAR2,CENA_PRODAJI INTEGER,KOLICHESTVO_TOV INTEGER)
    IS
    TOVAR INTEGER;
    PROVERKA INTEGER;
    prodaja INTEGER;
    BEGIN
    SELECT KOD INTO TOVAR FROM TOVAR1
    WHERE NAZVANIE = NAME_TOV AND CENA_PRODAJ=CENA_PRODAJI;
    SELECT MAX(KOD_PRODAJA) INTO prodaja FROM PRODAJA1;
    SELECT COUNT(*) INTO PROVERKA FROM PRODAJA1
    WHERE KOD_TOVAR=TOVAR AND KOLICHESTVO=KOLICHESTVO_TOV AND KOD_PRODAJA = prodaja;
    IF PROVERKA>0 THEN BEGIN
    DBMS_OUTPUT.PUT_LINE('Этот товар уже есть'||PROVERKA);RETURN;
    END;END IF;
    INSERT INTO PRODAJA1 (KOD_PRODAJA,KOD_TOVAR,KOLICHESTVO) VALUES (ID_PRODAJA.CURRVal,TOVAR,KOLICHESTVO_TOV);
    DBMS_OUTPUT.PUT_LINE('Товар добавлен');
END;
...
Рейтинг: 0 / 0
11.12.2016, 23:02
    #39364552
Alexander Ryndin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql oracle Ввод нескольких товаров в один заказ - Oracle
Аня1705,

Передавайте в процедуру параметр типа varray.
...
Рейтинг: 0 / 0
13.12.2016, 16:26
    #39365906
SirYouGin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql oracle Ввод нескольких товаров в один заказ - Oracle
Можно если передавать в процедуру id-продажи и возвращать из процедуры id-продажи.

id := add_tovar_to_prodaja( null, 'Яблоко', 50, 1); --Первый вызов -- создаем новую продажу, т.к. id продажи не заполнен и и добавляем в нее яблоки

id := add_tovar_to_prodaja(id, 'Груши', 100, 2); -- Второй вызов -- добавляем груши в продажу с заданным id
...
Рейтинг: 0 / 0
13.12.2016, 16:40
    #39365928
Аня1705
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql oracle Ввод нескольких товаров в один заказ - Oracle
SirYouGin, спасиииибо) хоть один адекватный человек на этом форуме
...
Рейтинг: 0 / 0
13.12.2016, 16:50
    #39365939
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql oracle Ввод нескольких товаров в один заказ - Oracle
Аня1705,

Использовать более адекватное решение от Alexander Ryndin было слишком сложно?
...
Рейтинг: 0 / 0
13.12.2016, 17:18
    #39365978
Аня1705
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql oracle Ввод нескольких товаров в один заказ - Oracle
env, я пробовала с этим разобраться, но как использовать в моем случае не поняла и никаких примеров не нашла
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Sql oracle Ввод нескольких товаров в один заказ - Oracle / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]