【发布时间】:2012-01-18 21:51:00
【问题描述】:
我正在编写一个触发器,但我遇到了一些问题。触发器执行和编译没有错误,但由于某些原因它不能完成我想要的工作。如果有人可以帮助我。
问题来了:
编写一个在插入、更新属性时执行的触发器。输入的每个属性都会与具有相同属性的其他属性进行检查:代理、所有者、地址,如果找到,则将属性状态更新为“双重”作为重复项。
我正在插入相同的数据,它允许我这样做,但通常不会!
这是我的桌子:
create table Properties(
idProperties number(10) NOT NULL,
Type varchar2(45) NOT NULL,
SquareMeters varchar2(10) NOT NULL,
Rooms number(10) NOT NULL,
ConstructionDate date NOT NULL,
FloorLocation varchar(20),
Price number(10) NOT NULL,
CityView varchar2(20),
DateOfInsert date NOT NULL,
DateOfExiration date NOT NULL,
Address_FK number(20),
Service_FK number(20),
Ownership_FK number(20),
Status_FK number(20),
PropertyService_FK number(20))
create table Address(
idAddress number(10) NOT NULL,
address_name varchar2(20),
City_FK number(20))
create table OwnerAgent(
idOwnerAgent number(10) NOT NULL,
Name varchar2(50) NOT NULL,
LastName varchar2(50) NOT NULL,
PhoneNr number(20),
Email varchar2(20),
Sex varchar2(10),
Profesion varchar2(20),
Birthdate date,
LastLogInDate date NOT NULL,
Status varchar2(20),
Address_FK number(20))
create table Ownership(
idOwnership number(10) NOT NULL,
PercentageOwed number(10)NOT NULL,
RequiredPercentage number(10) NOT NULL,
OwnerAgent_FK number(20))
这是我的触发器:
CREATE OR REPLACE TRIGGER Check_Duplicate
before insert or update on properties
FOR each ROW
declare
v_dup number;
begin
select count(idProperties) INTO v_dup from properties where Address_FK=:NEW.Address_FK and
Ownership_FK=:NEW.Ownership_FK;
if v_dup > 0 then
Raise_Application_Error (-20100, 'This property already exists. The insert is cancelled.');
end if;
end;
谢谢。
【问题讨论】:
-
声明唯一索引不是更容易吗?
-
主键或唯一约束有什么问题?另外两张表的用途是什么?作业?
-
听起来这是一道作业题。如果上述所有都相同或只有其中一个相同,您是否应该防止重复?
-
是的,这是一项家庭作业,就在我插入新数据时,例如,如果它具有相同的地址或所有者,则不应允许插入数据。
-
告诉你的老师触发器是个坏主意。当然,如果数据模型可以受到约束。
标签: sql database oracle triggers