【问题标题】:If-Else in PL/SQLPL/SQL 中的 If-Else
【发布时间】:2020-10-20 10:51:14
【问题描述】:

我想编写一个程序来执行仅允许提款的提款操作,如果帐户中有足够的资金,则更新帐户表并打印消息“交易成功”。否则打印,“数量不足”。 .该过程应以 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; 

但这没有显示任何输出或错误,请帮助。提前致谢!

【问题讨论】:

    标签: oracle plsql


    【解决方案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>
    

    【讨论】:

    • 是的,我使用的编译器也没有显示任何错误!即使您给出的这段代码也没有给出任何输出或错误。我感到很无助。能否请您再试一次并检查是否有错误?
    • 没问题。我尝试了它并编辑了我的答案,显示该过程已创建并成功执行。
    • 是的,这工作得很好,但唯一需要做的更改是 - IF amt < withdraw_operation.balance THEN DBMS_OUTPUT.put_line ('Transaction successful'); ELSE DBMS_OUTPUT.put_line ('Insufficient Amount'); END IF; 非常感谢您的帮助! :)
    猜你喜欢
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    相关资源
    最近更新 更多