Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 10.06.2019
Сообщений: 25

Ошибка при выполнении созданной хранимой процедуры

03.12.2023, 17:15. Показов 371. Ответов 2

Студворк — интернет-сервис помощи студентам
Здравствуйте всем, выполняя задания по SQL, я столкнулся с одной проблемой, а именно с выполнением хранимой процедуры. Суть задания заключается в следующем:
Вычислить общую сумму поступлений по «I-ой» операции по таблице Договора (* код операции задавать как параметр).
И оно должно быть выполнено в виде хранимой процедуры, которая при вызове и выдавала сумму.
Есть код структуры таблицы, и вставленных данных, он находится в спойлерах ниже, т.к. код длинный.
Структура:
Кликните здесь для просмотра всего текста
MySQL
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
CREATE TABLE ObjectTypes (
    ObjectTypeCode INT PRIMARY KEY,
    ObjectTypeName NVARCHAR(255) NOT NULL
);
CREATE TABLE Operations (
    OperationCode INT PRIMARY KEY,
    OperationName NVARCHAR(255) NOT NULL
);
CREATE TABLE Districts (
    DistrictCode INT PRIMARY KEY,
    DistrictName NVARCHAR(255) NOT NULL
);
CREATE TABLE Clients (
    ClientCode INT PRIMARY KEY,
    FullName NVARCHAR(255) NOT NULL, 
    Address NVARCHAR(255) NOT NULL,
    Phone NVARCHAR(14) NOT NULL,
    ClientType NVARCHAR(50) NOT NULL CHECK (ClientType IN ('юридическое лицо', 'физическое лицо'))
);
CREATE TABLE Employees (
    EmployeeCode INT PRIMARY KEY,
    FullName NVARCHAR(255) NOT NULL
);
CREATE TABLE RealEstateObjects (
    ObjectCode INT PRIMARY KEY,
    ObjectTypeCode INT NOT NULL,
    DistrictCode INT NOT NULL,
    Address NVARCHAR(255) NOT NULL,
    Cost DECIMAL(18, 2) NOT NULL,
    Area DECIMAL(18, 2) NOT NULL,
    Description NVARCHAR(MAX) NOT NULL,
    ClientCode INT,
    Status NVARCHAR(50) NOT NULL CHECK (Status IN ('выставлен на продажу', 'аренда', 'продан')),
    FOREIGN KEY (ObjectTypeCode) REFERENCES ObjectTypes (ObjectTypeCode) ON UPDATE CASCADE ON DELETE CASCADE,
    FOREIGN KEY (DistrictCode) REFERENCES Districts (DistrictCode) ON UPDATE CASCADE ON DELETE CASCADE,
    FOREIGN KEY (ClientCode) REFERENCES Clients (ClientCode) ON UPDATE CASCADE ON DELETE CASCADE,
);
CREATE TABLE Cash (
    ContractNumber NVARCHAR(255) PRIMARY KEY,
    EmployeeCode INT NOT NULL,
    ClientCode INT NOT NULL,
    TransactionDate DATE NOT NULL,
    Amount INT NOT NULL,
    FOREIGN KEY (EmployeeCode) REFERENCES Employees (EmployeeCode) ON UPDATE CASCADE ON DELETE CASCADE,
    FOREIGN KEY (ClientCode) REFERENCES Clients (ClientCode) ON UPDATE CASCADE ON DELETE CASCADE,
);
CREATE TABLE Contracts (
    ContractNumber NVARCHAR(255) PRIMARY KEY,
    RegistrationDate DATE NOT NULL,
    ObjectCode INT NOT NULL,
    ClientCode INT NOT NULL,
    EmployeeCode INT NOT NULL,
    Note NVARCHAR(MAX) NOT NULL,
    OperationCode INT NOT NULL,
    ContractPeriod NVARCHAR(255) NOT NULL,
    FOREIGN KEY (ObjectCode) REFERENCES RealEstateObjects (ObjectCode) ON UPDATE CASCADE ON DELETE CASCADE,
    FOREIGN KEY (ClientCode) REFERENCES Clients (ClientCode) ON UPDATE NO ACTION ON DELETE NO ACTION,
    FOREIGN KEY (EmployeeCode) REFERENCES Employees (EmployeeCode) ON UPDATE CASCADE ON DELETE CASCADE,
    FOREIGN KEY (OperationCode) REFERENCES Operations (OperationCode) ON UPDATE CASCADE ON DELETE CASCADE,
);

Сами данные для вставки в таблицы:
Кликните здесь для просмотра всего текста
MySQL
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
INSERT INTO ObjectTypes (ObjectTypeCode, ObjectTypeName) VALUES
(1, 'Квартира'),
(2, 'Дом'),
(3, 'Офис'),
(4, 'Земельный участок'),
(5, 'Коммерческое помещение'),
(6, 'Гараж'),
(7, 'Коттедж'),
(8, 'Вилла'),
(9, 'Пентхаус'),
(10, 'Таунхаус');
INSERT INTO Operations (OperationCode, OperationName) VALUES
(1, 'Продажа'),
(2, 'Аренда'),
(3, 'Покупка'),
(4, 'Строительство'),
(5, 'Обмен'),
(6, 'Сдача в аренду'),
(7, 'Покупка под ипотеку'),
(8, 'Ремонт'),
(9, 'Переуступка'),
(10, 'Обслуживание');
INSERT INTO Districts (DistrictCode, DistrictName) VALUES
(1, 'Центральный'),
(2, 'Северный'),
(3, 'Южный'),
(4, 'Западный'),
(5, 'Восточный'),
(6, 'Пригородный'),
(7, 'Индустриальный'),
(8, 'Торговый'),
(9, 'Рекреационный'),
(10, 'Экологический');
INSERT INTO Clients (ClientCode, FullName, Address, Phone, ClientType) VALUES
(1, 'ООО "Компания"', 'ул. Ленина, 123', '1234567890', 'юридическое лицо'),
(2, 'Иванов Иван Иванович', 'ул. Пушкина, 456', '9876543210', 'физическое лицо'),
(3, 'ЗАО "СтройИнвест"', 'ул. Гагарина, 789', '5678901234', 'юридическое лицо'),
(4, 'Петров Петр Петрович', 'ул. Чехова, 101', '3456789012', 'физическое лицо'),
(5, 'ООО "Риэлторская фирма"', 'ул. Толстого, 23', '7890123456', 'юридическое лицо'),
(6, 'Сидорова Анна Сергеевна', 'ул. Достоевского, 54', '2345678901', 'физическое лицо'),
(7, 'ИП "Продавец"', 'ул. Шекспира, 76', '6789012345', 'юридическое лицо'),
(8, 'Кузнецов Кирилл Андреевич', 'ул. Гоголя, 32', '8901234567', 'физическое лицо'),
(9, 'ООО "СтройГарант"', 'ул. Лермонтова, 98', '0123456789', 'юридическое лицо'),
(10, 'Никитина Наталья Владимировна', 'ул. Лермонтова, 45', '3210987654', 'физическое лицо');
INSERT INTO Employees (EmployeeCode, FullName) VALUES
(1, 'Иванов Иван Иванович'),
(2, 'Петров Петр Петрович'),
(3, 'Сидоров Сидор Сидорович'),
(4, 'Кузнецов Кузьма Кузьмич'),
(5, 'Никитин Никита Никитович'),
(6, 'Григорьева Григория Григорьевна'),
(7, 'Антонов Антон Антонович'),
(8, 'Ольгина Ольга Ольговна'),
(9, 'Дмитриев Дмитрий Дмитриевич'),
(10, 'Елена Елена Еленовна');
INSERT INTO RealEstateObjects (ObjectCode, ObjectTypeCode, DistrictCode, Address, Cost, Area, Description, ClientCode, Status) 
VALUES
(11, 1, 3, 'ул. Пушкина, 2', 130000, 85, 'Квартира в новостройке', 3, 'выставлен на продажу'),
(12, 3, 5, 'ул. Гагарина, 6', 320000, 160, 'Офисное помещение', 4, 'аренда'),
(13, 2, 1, 'ул. Лермонтова, 11', 260000, 210, 'Дом с участком', 5, 'продан'),
(14, 5, 8, 'ул. Чехова, 16', 520000, 310, 'Торговое помещение', 6, 'выставлен на продажу'),
(15, 4, 4, 'ул. Толстого, 8', 85000, 510, 'Земельный участок', 7, 'аренда'),
(16, 6, 2, 'ул. Достоевского, 31', 42000, 31, 'Гараж', 8, 'продан'),
(17, 7, 6, 'ул. Шекспира, 26', 720000, 410, 'Коттедж', 9, 'выставлен на продажу'),
(18, 8, 9, 'ул. Гоголя, 19', 1220000, 122, 'Вилла', 10, 'аренда'),
(19, 9, 7, 'ул. Лермонтова, 6', 1520000, 110, 'Пентхаус', 1, 'продан'),
(20, 10, 10, 'ул. Лермонтова, 51', 310000, 85, 'Таунхаус', 2, 'выставлен на продажу'),
(21, 1, 3, 'ул. Пушкина, 3', 140000, 90, 'Квартира в новостройке', 4, 'аренда'),
(22, 3, 5, 'ул. Гагарина, 7', 340000, 170, 'Офисное помещение', 5, 'выставлен на продажу'),
(23, 2, 1, 'ул. Лермонтова, 12', 270000, 220, 'Дом с участком', 6, 'продан'),
(24, 5, 8, 'ул. Чехова, 17', 540000, 320, 'Торговое помещение', 7, 'аренда'),
(25, 4, 4, 'ул. Толстого, 9', 88000, 520, 'Земельный участок', 8, 'выставлен на продажу'),
(26, 6, 2, 'ул. Достоевского, 32', 43000, 32, 'Гараж', 9, 'продан'),
(27, 7, 6, 'ул. Шекспира, 27', 730000, 420, 'Коттедж', 10, 'аренда'),
(28, 8, 9, 'ул. Гоголя, 20', 1240000, 124, 'Вилла', 1, 'выставлен на продажу'),
(29, 9, 7, 'ул. Лермонтова, 7', 1540000, 120, 'Пентхаус', 2, 'аренда'),
(30, 10, 10, 'ул. Лермонтова, 52', 320000, 90, 'Таунхаус', 3, 'продан');
INSERT INTO Cash (ContractNumber, EmployeeCode, ClientCode, TransactionDate, Amount) 
VALUES
('C1011', 1, 3, '2023-11-05', 55000),
('C1012', 2, 4, '2023-12-10', 85000),
('C1013', 3, 5, '2024-01-15', 130000),
('C1014', 4, 6, '2024-02-20', 210000),
('C1015', 5, 7, '2024-03-25', 35000),
('C1016', 6, 8, '2024-04-30', 70000),
('C1017', 7, 9, '2024-05-05', 170000),
('C1018', 8, 10, '2024-06-10', 210000),
('C1019', 9, 1, '2024-07-15', 280000),
('C1020', 10, 2, '2024-08-20', 110000),
('C1021', 1, 4, '2024-09-05', 59000),
('C1022', 2, 5, '2024-10-10', 89000),
('C1023', 3, 6, '2024-11-15', 134000),
('C1024', 4, 7, '2024-12-20', 214000),
('C1025', 5, 8, '2025-01-25', 36000),
('C1026', 6, 9, '2025-02-28', 72000),
('C1027', 7, 10, '2025-03-05', 174000),
('C1028', 8, 1, '2025-04-10', 218000),
('C1029', 9, 2, '2025-05-15', 290000),
('C1030', 10, 3, '2025-06-20', 115000);
INSERT INTO Contracts (ContractNumber, RegistrationDate, ObjectCode, ClientCode, EmployeeCode, Note, OperationCode, ContractPeriod) 
VALUES
('CON1011', '2023-11-01', 11, 3, 1, 'Продажа квартиры', 1, 'бессрочный'),
('CON1012', '2023-12-01', 12, 4, 2, 'Аренда офиса', 2, '12 месяцев'),
('CON1013', '2024-01-01', 13, 5, 3, 'Продажа дома', 3, 'бессрочный'),
('CON1014', '2024-02-01', 14, 6, 4, 'Продажа торгового помещения', 4, 'бессрочный'),
('CON1015', '2024-03-01', 15, 7, 5, 'Аренда земельного участка', 5, '24 месяца'),
('CON1016', '2024-04-01', 16, 8, 6, 'Продажа гаража', 6, 'бессрочный'),
('CON1017', '2024-05-01', 17, 9, 7, 'Продажа коттеджа', 7, 'бессрочный'),
('CON1018', '2024-06-01', 18, 10, 8, 'Аренда виллы', 8, '12 месяцев'),
('CON1019', '2024-07-01', 19, 1, 9, 'Продажа пентхауса', 9, 'бессрочный'),
('CON1020', '2024-08-01', 20, 2, 10, 'Продажа таунхауса', 10, 'бессрочный'),
('CON1021', '2024-09-01', 21, 4, 1, 'Продажа квартиры', 1, 'аренда'),
('CON1022', '2024-10-01', 22, 5, 2, 'Аренда офиса', 2, 'бессрочный'),
('CON1023', '2024-11-01', 23, 6, 3, 'Продажа дома', 3, 'бессрочный'),
('CON1024', '2024-12-01', 24, 7, 4, 'Продажа торгового помещения', 4, 'бессрочный'),
('CON1025', '2025-01-01', 25, 8, 5, 'Аренда земельного участка', 5, '24 месяца'),
('CON1026', '2025-02-01', 26, 9, 6, 'Продажа гаража', 6, 'бессрочный'),
('CON1027', '2025-03-01', 27, 10, 7, 'Продажа коттеджа', 7, 'бессрочный'),
('CON1028', '2025-04-01', 28, 1, 8, 'Аренда виллы', 8, '12 месяцев'),
('CON1029', '2025-05-01', 29, 2, 9, 'Продажа пентхауса', 9, 'бессрочный'),
('CON1030', '2025-06-01', 30, 3, 10, 'Продажа таунхауса', 10, 'бессрочный');

Так вот, есть хранимая процедура, код которой определен следующим образом:
SQL
1
2
3
4
5
6
7
8
9
10
11
CREATE PROCEDURE TotalOperation
    @OperationCode INT
AS
BEGIN
    DECLARE @TotalIncome DECIMAL(18, 2)
    SELECT @TotalIncome = SUM(Amount)
    FROM Cash C
    JOIN Contracts CT ON C.ContractNumber = CT.ContractNumber
    WHERE CT.OperationCode = @OperationCode;
    SELECT @TotalIncome AS TotalIncome;
END;
При вызове которой функцией EXEC, выводится таблица со столбцом TotalIncome, и в первой же строке выводит значение NULL, которого по идее не должно было быть. Где могла быть допущена ошибка, или сама ошибка заключается в структуре таблиц, или же создание хранимой процедуры было в корне неверным? Изначально по коду операции должна была вывестись сумма из столбца Amount, которая бы зависела именно от кода операции. Сам код операции может иметь от 1 до нескольких контрактов с идентификаторами CON1011-CON1030. Например, введя код операции - 1, были бы взяты строки CON1011 и CON1021, проверен столбец Amount, и были бы сложены значения по самим контрактам, то есть 55 000 + 59 000. Как решить данную проблему?
Сам вызов хранимой процедуры:
SQL
1
EXEC TotalOperation @OperationCode = 1;
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.12.2023, 17:15
Ответы с готовыми решениями:

Ошибка при выполнении процедуры
Есть процедура с одним входящим параметром типа date. Выполняю процедуру EXEC dbo.Listteam_i @datestruct =convert(date,...

Ошибка при выполнении хранимой процедуры - FireBird
Помогите люди добрые. Сия процедура компилируется нормально, но при выполнении возникает ошибка. Не могу понять в чем дело. create or...

Ошибка при вызове хранимой процедуры
Добрый день, подскажите что делать? Может кто сталкивался с данной проблемой. При вызове хранимой процедуры - выскакивает сообщение с...

2
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
03.12.2023, 19:01
Лучший ответ Сообщение было отмечено SergeyGryzlov как решение

Решение

а CON1011 и CON1021 попробуй найти в Cash. глазами или запросиком
а в процедуре просто достаточно
SQL
1
2
3
4
    SELECT SUM(Amount) TotalIncome
      FROM Cash C
        JOIN Contracts CT ON C.ContractNumber = CT.ContractNumber
      WHERE CT.OperationCode = @OperationCode;
1
0 / 0 / 0
Регистрация: 10.06.2019
Сообщений: 25
03.12.2023, 19:48  [ТС]
Цитата Сообщение от Аватар Посмотреть сообщение
а CON1011 и CON1021 попробуй найти в Cash
Ох, и правда, заработался за отчетами и не заметил. Теперь по вашей наводке все работает. Спасибо большое.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.12.2023, 19:48
Помогаю со студенческими работами здесь

Ошибка при вызове хранимой процедуры
Создал хранимую процедуру: CREATE DEFINER=`root`@`localhost` PROCEDURE `QueryAuthentification`(IN `@hash` VARCHAR(50)) LANGUAGE SQL ...

Ошибка при вызове хранимой процедуры. Ее тело выполняется без ошибок
Добрый день. Столкнулся с мистикой какой-то. Есть средней сложности запрос, который хранится в хранимой процедуре. Эта процедура хорошо...

Ошибка при создании хранимой процедуры lock conflict on no wait transaction
Всем доброго вечера! Помогите пожалуйста, такая проблема.Создаю базу в IBExpert. При создании хранимой процедуры на добавлении записи в...

Ошибка при выполнении процедуры (количество строк)
Очень нужна помощь! Пишу процедуру: CREATE PROCEDURE `ocenki_st`(OUT disciplina CHAR(31), ...

Ошибка в запросе хранимой процедуры
При создании хранимой процедуры мускул ругается У вас ошибка в запросе. Изучите документацию по используемой версии MySQL на предмет...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 01.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 31.01.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru