gpt4 book ai didi

sql - 如何在 oracle 中创建一个触发器,以确保如果 satrt 日期早于当前日期,则不会删除任何记录?

转载 作者:行者123 更新时间:2023-12-01 19:35:46 25 4
gpt4 key购买 nike

我有一张 table 电影。

create table Movie
(
mv_id number(5),
mv_name varchar2(30),
startdate date
)
insert into Movie values(1,'AVATAR','8-MAR-2012');
insert into Movie values(2,'MI3','20-MAR-2012');
insert into Movie values(3,'BAD BOYS','10-Feb-2012');

我想创建一个触发器,以确保在 satrt 日期早于当前日期时不会删除任何记录。我的触发代码是 --

create  or replace  trigger trg_1
before delete
on Movie
for each row
when(old.startdate < sysdate)
begin
raise_application_error(-20001, 'Records can not be deleted');
end;

创建触发器。当我执行这段代码删除数据时--

delete from Movie where mv_id=1;

然后触发器触发但有错误,我不知道为什么我会收到这样的错误。我不想要任何错误,我只想要消息。这是错误——

delete from Movie where mv_id=1
*
ERROR at line 1:
ORA-20010: Records can not be deleted
ORA-06512: at "OPS$0924769.TRG_1", line 3
ORA-04088: error during execution of trigger 'OPS$0924769.TRG_1'

我想摆脱这个错误。

最佳答案

表上的触发器阻止任何操作的唯一方法是抛出异常。您不能拥有阻止 DELETE 并打印消息的触发器。

您可以编写一个尝试显示消息并允许删除发生的触发器

create  or replace  trigger trg_1
before delete
on Movie
for each row
when(old.startdate < sysdate)
begin
dbms_output.put_line( 'Records can not be deleted');
end;

如果客户端碰巧配置为显示写入 DBMS_OUTPUT 缓冲区的数据(大多数客户端不会),这将显示一条消息。但它也会让删除成功,这听起来不像你想要的。

关于sql - 如何在 oracle 中创建一个触发器,以确保如果 satrt 日期早于当前日期,则不会删除任何记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9662570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com