如何编写一个 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;
/
我有一个 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;
/