所以我试图在表“gymbesök”中添加一行,对此没有什么复杂的。但是在添加一行之前,我应该调用ive制作的两个函数。但是我不确定在调用两个时如何建立语法。如果这两个功能不符合REQ,则交易将停止。
这是我的代码
dsquery * "Fully-Qualified-DN-Here" -scope base -attr badPwdCount -s DomainControllerUsedInLDAPBind
谢谢
答案 0 :(得分:2)
将验证作为两个单独的调用进行。另外,最好先验证参数,并且仅在验证通过后才插入行。
Create or replace procedure do_gymbesök(
P_rfid in gymbesök.rfid%type,
P_gymid in number)
As
Begin
if (get_träningspass(p_antal) = 0) then
raise_application_error (-20001, 'Inga träningspass kvar');
end if;
if (get_behörighet (p_gymid, p_rfid) = 0) then
raise_application_error (-20001, 'Öbehörig');
end if;
Insert into gymbesök (radnr,rfid,gymid,datum)
Values (radnr.seq.nextval, p_rfid, p_gymid, sysdate);
end;
/
您对RAISE_APPLICATION_ERROR的调用均使用相同的错误号。一般来说,对不同的错误(而不只是不同的消息)使用不同的错误编号是一个好主意。 Oracle在-20999到-20000之间提供了大量的数字,因此应该有足够的余数。
您有一个针对p_antal
的测试,该测试未出现在发布的代码中。我认为这是一个转录错误。
答案 1 :(得分:2)
也许是这样?
INSERT
我已经修改了您返回的错误代码,以便您可以区分这两个。在这两种情况下都使用20001并不是一个错误,但是-为什么呢?
create or replace procedure do_gymbesök(
p_rfid in gymbesök.rfid%type,
p_gymid in number)
as
begin
if get_behörighet (p_gymid, p_rfid) = 0 then
raise_application_error (-20000, 'Öbehörig');
elsif get_träningspass(p_antal) = 0 then
raise_application_error (-20001, 'Inga träningspass kvar');
end if;
insert into gymbesök (radnr,rfid,gymid,datum)
values (radnr_seq.nextval, p_rfid, p_gymid, sysdate);
end;
/
或者,将一个IF
条件与OR
一起使用:
create or replace procedure do_gymbesök(
p_rfid in gymbesök.rfid%type,
p_gymid in number)
as
begin
if get_behörighet (p_gymid, p_rfid) = 0 or
get_träningspass(p_antal) = 0
then
raise_application_error (-20001, 'Öbehörig / Inga träningspass kvar');
else
insert into gymbesök (radnr,rfid,gymid,datum)
values (radnr_seq.nextval, p_rfid, p_gymid, sysdate);
end if;
end;
/