#oracle #plsql
#Oracle #plsql
Вопрос:
Я хочу написать процедуру для выполнения операции вывода средств, которая разрешает вывод средств только при наличии достаточного количества средств на счете, затем обновите таблицу учетных записей и выведите сообщение «Транзакция прошла успешно». иначе выведите «Недостаточная сумма». . Процедура должна принимать Account_id и сумму вывода в качестве входных данных.
Account:
ACCNO NUMBER PK
CUSTOMER_NAME VARCHAR2(30)
BALANCE NUMBER(15,2)
12345 Williams 23455.6
23456 Robert 43221
34521 John 23449
Функциональное требование:
procedure withdraw(ano number , amt number)
Пример ввода:
withdraw(12345, 2000);
Пример вывода:
Transaction successful.
Я попытался написать этот код, который выглядит следующим образом-
set serveroutput on;
create or replace procedure withdraw(ano number, amt number) is withdraw_operation account%rowtype;
begin
select * into withdraw_operation from account
if (amt > balance)
then dbms_output.put_line('Transaction successful');
else dbms_output.put_line('Insufficient Amount');
end if;
end;
Но это не показывает никаких выходных данных или ошибок, пожалуйста, помогите. Заранее спасибо!
Ответ №1:
это не показывает никаких выходных данных или ошибок
В это трудно поверить, потому что то, что вы опубликовали, неверно.
В любом случае: из того, что вы опубликовали, должно быть что-то вроде этого:
Пример данных:
SQL> SET SERVEROUTPUT ON;
SQL>
SQL> SELECT * FROM account;
ACCNO CUSTOMER BALANCE
---------- -------- ----------
12345 Williams 23455,6
23456 Robert 43221
34521 John 23449
Процедура:
SQL> CREATE OR REPLACE PROCEDURE withdraw (ano NUMBER, amt NUMBER)
2 IS
3 withdraw_operation account%ROWTYPE;
4 BEGIN
5 SELECT *
6 INTO withdraw_operation
7 FROM account
8 WHERE accno = ano;
9
10 IF amt > withdraw_operation.balance
11 THEN
12 DBMS_OUTPUT.put_line ('Transaction successful');
13 ELSE
14 DBMS_OUTPUT.put_line ('Insufficient Amount');
15 END IF;
16 END;
17 /
Procedure created.
Тестирование:
SQL> EXEC withdraw(12345, 2000);
Insufficient Amount
PL/SQL procedure successfully completed.
SQL>
Комментарии:
1. Да, компилятор, который я использую, тоже не показывает никаких ошибок! Даже этот код, который вы указали, не выдает никаких выходных данных или ошибок. Я чувствую себя беспомощным. Не могли бы вы повторить попытку и проверить наличие ошибки, если таковая имеется?
2. Нет проблем. Я попробовал и отредактировал свой ответ, который показывает, что процедура была создана и успешно выполнена.
3. Да, это сработало просто отлично, но единственными изменениями, которые нужно было внести, были —
IF amt < withdraw_operation.balance THEN DBMS_OUTPUT.put_line ('Transaction successful'); ELSE DBMS_OUTPUT.put_line ('Insufficient Amount'); END IF;
Большое вам спасибо за помощь! 🙂