首页 > 解决方案 > 我的 if 语句在我的 addme 过程中不起作用,但其他一切都很好。在 PLSQL 中

问题描述

我的 if 语句在我的 addme 过程中不起作用,但其他一切都很好。我试图在另一个 if 语句之前使用一个 if 语句,以便只检查前三个而不是检查所有五个。如果前三个为空,则检查接下来的两个,如果为空则注册,如果不是,则显示错误消息。

第 22-42 行

     create or replace procedure addme(
  2  p_snum students.snum%type,
  3  p_callnum schclasses.callnum%type) as
  4  v_errormsg varchar2(1000);
  5  v_errortxt varchar2(1000);
  6  
  7  begin
  8  
  9  
 10  checks#(p_snum, v_errortxt);
 11  
 12  v_errormsg:=v_errortxt;
 13  
 14  checkcall#(p_callnum, v_errortxt);
 15  
 16  v_errormsg:=v_errormsg ||' '|| v_errortxt;
 17  
 18  already_enrolled(p_snum, p_callnum, v_errortxt);
 19  
 20  v_errorMsg:=v_errormsg ||' '||v_errortxt;
 21  
 22  if v_errormsg is null then
 23  
 24  checkstand(p_snum, p_callnum, v_errortxt);
 25  
 26  v_errormsg:=v_errortxt;
 27  
 28  checkcapacity(p_snum, p_callnum, v_errortxt);
 29  
 30  v_errorMsg:=v_errormsg || v_errortxt;
 31  
 32  
 33  if v_errormsg is null then
 34  
 35  insert into enrollments values (p_snum, p_callnum, null);
 36          dbms_output.put_line('You have successfully enrolled in course number ' || p_callnum);
 37  
 38  end if;
 39  else
 40          dbms_output.put_line(v_errorMsg);
 41  
 42  end if;
 43  
 44  end;
 45  /

Procedure created.

SQL> select * from enrollments;

SNU    CALLNUM GR                                                               
--- ---------- --                                                               
101      10110 F                                                                
102      10150 B                                                                
103      10155 A                                                                
101      10125                                                                  
102      10130                                                                  
102      10115                                                                  
103      10115                                                                  

7 rows selected.

SQL> 
SQL> set serveroutput on
SQL> exec addme(101, 10125)
Sorry, the student with number 101 already enrolled in class number 10125.      

PL/SQL procedure successfully completed.

SQL> 
SQL> set serveroutput on
SQL> exec addme(109, 10125)
Student number 109 is invalid.                                                  

PL/SQL procedure successfully completed.

SQL> 
SQL> 
SQL> set serveroutput on
SQL> exec addme(101, 99525)
Call Number 99525 is invalid                                                    

PL/SQL procedure successfully completed.

SQL> 
SQL> set serveroutput on
SQL> exec addme(109, 99525)
Student number 109 is invalid. Call Number 99525 is invalid                     

PL/SQL procedure successfully completed.

SQL> 
SQL> set serveroutput on
SQL> exec addme(103, 10125)

PL/SQL procedure successfully completed.

SQL> 
SQL> select * from enrollments;

SNU    CALLNUM GR                                                               
--- ---------- --                                                               
101      10110 F                                                                
102      10150 B                                                                
103      10155 A                                                                
101      10125                                                                  
102      10130                                                                  
102      10115                                                                  
103      10115                                                                  

7 rows selected.

标签: plsql

解决方案


推荐阅读