Форум программистов, компьютерный форум, киберфорум
Наши страницы
Firebird/InterBase
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/10: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Krot_F
1 / 1 / 1
Регистрация: 07.12.2009
Сообщений: 99
1

Извлечь значение из таблицы и ввести его в переменную в ХП

04.01.2013, 17:46. Просмотров 1778. Ответов 3
Метки нет (Все метки)

Добрый день.
Пожалуйста подскажите.
Имеется 3 таблицы: GOODS, PARTY_SUPPLIES, LOG_DELIVERY.
В процедуре выполняется следующее:
Проверяется условие того что есть ли в таблице GOODS введенное значение. Если нет, то заполняем все 3 таблицы. Если же данный товар есть в таблице GOODS, то изменяется поле TOTAL_NUMBER таблицы GOODS и оставшиеся 2 таблицы заполняются.

Вся хранимая процедура:

SQL
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
SET TERM ^ ;
CREATE PROCEDURE NEW_TOV6(
 /*входные параметры*/
         T_NAME CHAR(15),
         T_PRICE NUMERIC(5, 2),
         T_MANUFACT CHAR(30),
         PID_SUPPLIER   INT,
         PDATE_S DATE,
         LNUMBER INT
        )
AS
/*объявляем переменные*/
DECLARE variable OP INT;
DECLARE variable OPA INT;
DECLARE variable I INT;
BEGIN
/*Если нет записи с указанным именем, то идёт заполнение полей*/
    IF (NOT EXISTS(SELECT * FROM Goods WHERE Goods.GOODS_NAME=:T_NAME))
           THEN
     BEGIN
/*здесь генерируем и присваиваем значение переменным*/
          OP = GEN_ID(ID_TOV,1);
          OPA = GEN_ID(ID_PART,1);
/*вставляем в поля таблицы GOODS*/
          INSERT INTO GOODS (
                 ID_GOODS,
                 GOODS_NAME,
                 GOODS_PRICE,
                 MANUFACTURER,
                 TOTAL_NUMBER
          ) VALUES (:OP, :T_NAME, :T_PRICE, :T_MANUFACT, :LNUMBER);
/*вставляем в поля таблицы PARTY_SUPPLIES*/
          INSERT INTO PARTY_SUPPLIES (
                 ID_DELIVERY,
                 ID_SUPPLIER,
                 DATE_S
          ) VALUES (:OPA, :PID_SUPPLIER, :PDATE_S);
/*вставляем в поля таблицы LOG_DELIVERY*/
          INSERT INTO LOG_DELIVERY (
                 ID_DELIVERY,
                 ID_GOODS,
                 NUMBER
         ) VALUES (:OPA, :OP, :LNUMBER);
       SUSPEND;
       END
    ELSE
     BEGIN
/*если же такой товар есть, то */
/*генерируем значение и записываем его в переменную*/
             OPA = GEN_ID(ID_PART,1);    
/*переменной I присваиваем значение входного параметра*/       
             I = LNUMBER;
/*здесь просто переменной задаём значение*/
             OP = 4;
/*далее изменяем значение нужного поля таблицы GOODS путём прибавления*/
           UPDATE GOODS SET TOTAL_NUMBER = TOTAL_NUMBER + :i
           WHERE GOODS_NAME = :T_NAME;
/*вставляем в поля таблицы PARTY_SUPPLIES*/
          INSERT INTO PARTY_SUPPLIES (
                 ID_DELIVERY,
                 ID_SUPPLIER,
                 DATE_S
          ) VALUES (:OPA, :PID_SUPPLIER, :PDATE_S);
/*вставляем в поля таблицы LOG_DELIVERY*/
          INSERT INTO LOG_DELIVERY (
                 ID_DELIVERY,
                 ID_GOODS,
                 NUMBER
         ) VALUES (:OPA, :OP, :LNUMBER);
       SUSPEND;
     END
suspend;
END
^
COMMIT WORK ^
SET TERM ;^
Всё работает, но надо как-то в переменную OP записать значение поля ID_GOODS таблицы GOODS.
То есть это место надо изменить:

SQL
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
ELSE
     BEGIN
/*если же такой товар есть, то */
/*генерируем значение и записываем его в переменную*/
             OPA = GEN_ID(ID_PART,1);    
/*переменной I присваиваем значение входного параметра*/       
             I = LNUMBER;
/*здесь просто переменной задаём значение*/
             OP = .......... здесь нужно как-то присвоить значение поля из таблицы.............;
/*далее изменяем значение нужного поля таблицы GOODS путём прибавления*/
           UPDATE GOODS SET TOTAL_NUMBER = TOTAL_NUMBER + :i
           WHERE GOODS_NAME = :T_NAME;
/*вставляем в поля таблицы PARTY_SUPPLIES*/
          INSERT INTO PARTY_SUPPLIES (
                 ID_DELIVERY,
                 ID_SUPPLIER,
                 DATE_S
          ) VALUES (:OPA, :PID_SUPPLIER, :PDATE_S);
/*вставляем в поля таблицы LOG_DELIVERY*/
          INSERT INTO LOG_DELIVERY (
                 ID_DELIVERY,
                 ID_GOODS,
                 NUMBER
         ) VALUES (:OPA, :OP, :LNUMBER);
       SUSPEND;
     END
Добавлено через 3 часа 9 минут
Я может криво немного написал, но суть в том как можно в ХП достать из нужного поля таблицы значение этого поля и уже потом это значение присвоить переменной.

Пожалуйста помогите
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2013, 17:46
Ответы с готовыми решениями:

Ввести новое значение в переменную B и вставить его в начало массива
Пусть в массиве A заполнены первые K мест,где 1<=K<20. Требуется ввести новое...

Извлечь слово и передать его в переменную
Здравствуйте. Помогите пожалуйста разобраться: 1 вопрос: Есть переменная...

Как ввести переменную в форме а не поле таблицы
Я писал всегда в MS FoxPro так там все ясно - рисуешь поле, в свойствах пишешь...

Как извлечь значение поля текущей строки из таблицы?
Имеется таблица SprKlassaTovara, в ней два поля IDKlassaTovara и KlassTovara....

Выбирая дату в dateTimePicker записать в одну переменную его значение, в другую - значение минус один день
Здравствуйте! У меня на форме лежит dateTimePicker1. Подскажите как...

3
arni
906 / 871 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
04.01.2013, 18:50 2
Цитата Сообщение от Krot_F Посмотреть сообщение
как можно в ХП достать из нужного поля таблицы значение этого поля и уже потом это значение присвоить переменной.
Вроде бы не проблема вовсе. Вот два варианта присвоить переменной значение поля сингулярной выборки
SQL
1
2
3
4
5
6
7
8
9
10
DECLARE variable VAR1 VARCHAR(255);
DECLARE variable VAR2 TIMESTAMP;
BEGIN
  SELECT mon$database_name
    FROM mon$database
    INTO :VAR1;
 
  VAR2 = (SELECT mon$creation_date
            FROM mon$database);
END
или вопрос был в другом?
1
Krot_F
1 / 1 / 1
Регистрация: 07.12.2009
Сообщений: 99
04.01.2013, 21:49  [ТС] 3
Цитата Сообщение от arni Посмотреть сообщение
Вроде бы не проблема вовсе. Вот два варианта присвоить переменной значение поля сингулярной выборки
Спасибо большое. Надоумили, а то совсем зарапортовался по неопытности)

Вот что получилось если кому интересно:

SQL
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
SET TERM ^ ;
CREATE PROCEDURE NEW_TOV6(
         T_NAME CHAR(15),
         T_PRICE NUMERIC(5, 2),
         T_MANUFACT CHAR(30),
         PID_SUPPLIER   INT,
         PDATE_S DATE,
         LNUMBER INT
        )
AS
DECLARE variable OP INT;
DECLARE variable OPA INT;
DECLARE variable I INT;
BEGIN
    IF (NOT EXISTS(SELECT * FROM Goods WHERE Goods.GOODS_NAME=:T_NAME))
           THEN
     BEGIN
          OP = GEN_ID(ID_TOV,1);
          OPA = GEN_ID(ID_PART,1);
          INSERT INTO GOODS (
                 ID_GOODS,
                 GOODS_NAME,
                 GOODS_PRICE,
                 MANUFACTURER,
                 TOTAL_NUMBER
          ) VALUES (:OP, :T_NAME, :T_PRICE, :T_MANUFACT, :LNUMBER);
          INSERT INTO PARTY_SUPPLIES (
                 ID_DELIVERY,
                 ID_SUPPLIER,
                 DATE_S
          ) VALUES (:OPA, :PID_SUPPLIER, :PDATE_S);
          INSERT INTO LOG_DELIVERY (
                 ID_DELIVERY,
                 ID_GOODS,
                 NUMBER
         ) VALUES (:OPA, :OP, :LNUMBER);
       SUSPEND;
       END
    ELSE
     BEGIN
             OPA = GEN_ID(ID_PART,1);           
             I = LNUMBER;
           UPDATE GOODS SET TOTAL_NUMBER = TOTAL_NUMBER + :i
           WHERE GOODS_NAME = :T_NAME;
          INSERT INTO PARTY_SUPPLIES (
                 ID_DELIVERY,
                 ID_SUPPLIER,
                 DATE_S
          ) VALUES (:OPA, :PID_SUPPLIER, :PDATE_S);
          INSERT INTO LOG_DELIVERY (
                 ID_DELIVERY,
                 ID_GOODS,
                 NUMBER
         ) VALUES (:OPA, (SELECT ID_GOODS FROM Goods WHERE Goods.GOODS_NAME=:T_NAME), :LNUMBER);
       SUSPEND;
     END
suspend;
END
^
COMMIT WORK ^
SET TERM ;^
В принципе вот сюда встроенным запросом вставил:

SQL
1
2
3
4
5
         INSERT INTO LOG_DELIVERY (
                 ID_DELIVERY,
                 ID_GOODS,
                 NUMBER
         ) VALUES (:OPA, (SELECT ID_GOODS FROM Goods WHERE Goods.GOODS_NAME=:T_NAME), :LNUMBER);
0
arni
906 / 871 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
04.01.2013, 22:16 4
suspend в процедуре, не имеющей выходных параметров, по меньшей мере подозрителен.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2013, 22:16

Составить программу, которая позволяет ввести с клавиатуры шестнадцатеричное число и записать его в переменную a, выполнить требуемую проверку.
Составить программу, которая позволяет ввести с клавиатуры шестнадцатеричное...

Ввести массив в виде таблицы и переставить его элементы местами
То есть последний элемент в массиве становится предпоследним и тд... Вот я...

Как получить значение из таблицы в переменную, зная id строки?
Добрый день! :) есть небольшая беда, буду рад помощи: Имеется таблица...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru