我的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.