Перевод в банке
От: Kleo  
Дата: 11.03.22 16:49
Оценка: :)
Есть база данных в банке.

В базе данных есть таблица со счетами (назовем её для простоты T).

В таблице T есть среди прочих поля:
N — Номер счета
S — сумма на счете
Требуется:
Написать хранимую процедуру на языке TSQL, которая:
1. Принимает в качестве аргументов параметры:
@N1 — номер первого счета
@N2 — номер второго счета
@S — сумма денежных средств

2. Переводит сумму @S с первого на второй счет, при это проверяя, достаточно ли средств на первом счете
3. Использует транзакцию при переводе с первого на второй счет .

Не получается, надо исправить ошибку.

Alter PROCEDURE TransferAmount(@N1 int,
@N2 int,
@S int
)

AS
BEGIN TRANSACTION
IF( @N1>=@S)
BEGIN
SET @N1=@N1-@S;
SET @N2=@N2+@S;
END;
COMMIT;


GO
Re: Перевод в банке
От: Буравчик Россия  
Дата: 11.03.22 17:39
Оценка:
Здравствуйте, Kleo, Вы писали:


K>В базе данных есть таблица со счетами (назовем её для простоты T).

K>Не получается, надо исправить ошибку.

На cyberforum.ru чаще помогают с такими (учебными) задачками. Там сильно больше студентов.
Best regards, Буравчик
Re: Перевод в банке
От: wildwind Россия  
Дата: 12.03.22 08:18
Оценка:
Здравствуйте, Kleo, Вы писали:

K>Не получается, надо исправить ошибку.


И какая ошибка? Или мы еще и найти ошибку должны вместо тебя?

K>Alter PROCEDURE TransferAmount(@N1 int,


А это ты сам(а) написал(а)? Объяснить сможешь?
Я вот не понимаю, что это за арифметические операции с номерами счетов.
Re[2]: Перевод в банке
От: Kleo  
Дата: 12.03.22 10:19
Оценка: -3
Здравствуйте, wildwind, Вы писали:

W>Здравствуйте, Kleo, Вы писали:


K>>Не получается, надо исправить ошибку.


W>И какая ошибка? Или мы еще и найти ошибку должны вместо тебя?


K>>Alter PROCEDURE TransferAmount(@N1 int,


W>А это ты сам(а) написал(а)? Объяснить сможешь?

W>Я вот не понимаю, что это за арифметические операции с номерами счетов.
Написала сама. Чего объяснять? Так всё понятно.
Re: Перевод в банке
От: stomsky Россия  
Дата: 14.03.22 08:57
Оценка:
Здравствуйте, Kleo, Вы писали:

K>В таблице T есть среди прочих поля:

K>N — Номер счета
K>S — сумма на счете
Это учебная задача? Просто в реальных базах данных так никто не хранит...

Твое описание параметров процедуры:
K>1. Принимает в качестве аргументов параметры:
K> @N1 — номер первого счета
K> @N2 — номер второго счета
K> @S — сумма денежных средств

противоречит логике процедуры:
K>AS
K>BEGIN TRANSACTION
K>IF( @N1>=@S)
K>BEGIN
K>SET @N1=@N1-@S;
K>SET @N2=@N2+@S;
K>END;
K>COMMIT;

Судя по этому:
K>IF( @N1>=@S)
в @N1 и @N2 процедура получает не номер счета, а текущий остаток на счете.

Если @N1 и @N2 — это все-таки номера счетов (кстати, почему номера счетов имеют тип INT?), то тебе сначала надо по этим номам получить текущие остатки, и только потом выполнять арифметические операции с ними.
И еще, где тут сохранение новых вычисленных остатков а таблице?
Красота — наивысшая степень целесообразности. (c) И. Ефремов
Re: Перевод в банке
От: Janus Россия  
Дата: 18.03.22 13:26
Оценка:
Здравствуйте, Kleo, Вы писали:


K>Есть база данных в банке.


K>В базе данных есть таблица со счетами (назовем её для простоты T).



в реальной банковской базе так никто не делает
есть дебет / кредит

Вас не смущает , что вы из номера счета вычитаете / прибавляете сумму ?
... Хорошо уметь читать между строк. Это иногда
приносит большую пользу
Re: Перевод в банке
От: Sinclair Россия https://github.com/evilguest/
Дата: 19.03.22 05:11
Оценка: :)
Здравствуйте, Kleo, Вы писали:
K>Есть база данных в банке.
Подскажите, где вы учитесь?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.