如何编写一个 pl/sql 程序以不允许在周日使用触发器进行交易?

How to write a pl/sql program to not allow transaction on Sundays using trigger?

我有一个 table 名为 emp1

Create table emp1
(
 Emp_no number(3),
 Name varchar(10),
 Salary number(9,2),
 Dept_no number(3)
);

我的触发器是

create or replace trigger tri1
before insert on emp1
for each row
begin
   if to_char(sysdate,'day')='sunday' then
       dbms_output.put_line('You cannot access');
   End if;
End;

执行这个触发器后,我插入下面的语句

insert into emp1(Name, Salary, Dept_no) values ('abc',12000,101);

每次我插入它总是被插入。

我也试过使用异常

create or replace trigger tri1 
before insert on emp1 
for each row 
declare
     weekday_error exception;
begin 
if to_char(sysdate,'day')='sunday' then
raise weekday_error;
end if; 
Exception
  when weekday_error then
     dbms_output.put_line('You cannot access');
End;

使用此方法也总是会插入记录。

  create or replace trigger tri1 
    before insert on emp1 
    for each row 

    begin 
    if to_char(sysdate,'Day')='Sunday' then
    raise_application_error(-20000,'Cannot do transaction on Sunday');
    End if; 

End;

你的触发器只有一个小问题。 TO_CHAR(sysdate,'day') 实际上 returns 9 个字符。

比如 MONDAY 是 6 个字符,然后是 3 Space 个字符。这是因为 WEDNESDAY 有 9 个字符。

您的触发器只需要 trim 函数

create trigger trig1 before insert on emp1
for each row
begin
    if trim(to_char(sysdate, 'day')) = 'sunday' then
        raise_application_error(-20000,'ikidyounot, today was - ' || to_char(sysdate, 'day'));
    end if;
end;
/