If -Else в PL / SQL

#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; Большое вам спасибо за помощь! 🙂