Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Программирование

Задачи для обучения SQL-запросам в Супермаге : Программирование

25.04.2024 20:33


20.11.2014 10:57
Mtirt
 
Логично. Условие связывания таблицы smspec и smcard нужно. Верни назад sp.article = crd.article
20.11.2014 10:59
BotMan
 
результат вышел, но RN все же опять равен 1.
я вчера из книги много перепробовал вариантов, всегда выходила одЫнка 8(
20.11.2014 11:06
BotMan
 
вот лошара, where rn=1 не убрал )))))))))))))))))))
20.11.2014 11:26
Mtirt
 
Во внутреннем запросе нет условия на RN.
20.11.2014 12:18
BotMan
 
есть скриптик, который заполняем при инвентаризации ПН амортизационную ценами поставщика и розничной. пытался сунуть туда просто приходную, ноль эмоций! вроде должен подойти и в обычную приходную.

Код:
DECLARE I PLS_INTEGER; ' + #13 +
        'BEGIN ' + #13 + 
        '  FOR c IN (SELECT doctype, docid, specitem, itemprice ' + #13 + 
        '            FROM supermag.smspec ' + #13 + 
        '            WHERE doctype = ''WI'' AND docid = ''' + paramDocID + ''') ' + #13 +
        '  LOOP ' + #13 +
        '    BEGIN ' + #13 + 
        '      SELECT count(*) INTO I FROM supermag.smspecby WHERE doctype = c.doctype AND docid = c.docid AND specitem = c.specitem; ' + #13 +
        '      IF I = 0 THEN ' + #13 + 
        '        INSERT INTO supermag.smspecby(doctype, docid, specitem, manufacturersprice, extracharge, retailprice) ' + #13 +
        '        VALUES(c.doctype, c.docid, c.specitem, c.itemprice, 0, c.itemprice); ' + #13 +
        '      ELSE ' + #13 + 
        '        UPDATE supermag.smspecby ' + #13 +
        '        SET manufacturersprice = c.itemprice, extracharge = 0, retailprice = c.itemprice ' + #13 +
        '        WHERE doctype = c.doctype AND docid = c.docid AND specitem = c.specitem; ' + #13 +
        '      END IF; ' + #13 +
        '      COMMIT; ' + #13 +
        '    EXCEPTION WHEN OTHERS THEN NULL; ' + #13 +
        '    END; ' + #13 +
        '  END LOOP; ' + #13 +
        'END;'
в чем может быть затык ?
20.11.2014 12:28
BotMan
 
тут вроде как берутся данные отсюда:
Код:
FOR c IN (SELECT doctype, docid, specitem, itemprice ' + #13 + 
        '            FROM supermag.smspec ' + #13 + 
        '            WHERE doctype = ''WI'' AND docid = ''' + paramDocID + ''')

и вставляются сюда
Код:
ELSE ' + #13 + 
        '        UPDATE supermag.smspecby ' + #13 +
        '        SET manufacturersprice = c.itemprice, extracharge = 0, retailprice = c.itemprice ' + #13 +
        '        WHERE doctype = c.doctype AND docid = c.docid AND specitem = c.specitem;
но откуда в с будут цены??? короче пока ломаю голову.
20.11.2014 12:36
Mtirt
 
так ты же в переменную с выбираешь "SELECT doctype, docid, specitem, itemprice", в том числе и цены из заданной ранее приходной накладной...
20.11.2014 12:41
BotMan
 
в переменную С вставляется данная накладная, в которую нужно напихать, я так понял, а не из которой брать. и она изначально пустая, только с перечнем товара.
20.11.2014 12:48
Mtirt
 
Переменное С передаются строки имеющейся приходной накладной. На её основании заполняются значения белорусской части спецификации этой накладной.
20.11.2014 13:24
BotMan
 
вот я создал "ПН1212" накладную, обычную. и пытаюсь заполнить ее при помощи этого скрипта. вызываю его, вбиваю в него номер этой накладной "ПН1212", он пишет все пучком, скрипт успешно прошел. захожу в накладную - цены не проставились!

ну вот я и думаю, ну а откуда там чему взяться то???? все столбцы которые передаются в С переменную - пустые!
или они как то создаются по разному эти компенсационные СВ00025-ПН0001 ??? эти заполняются, как пологен. а обычная - нифига)))
Часовой пояс GMT +3, время: 20:33.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.