我必须编写一个程序来检查两件事: 一种是检查国家/地区表中的重复country_id,如果存在,则不应插入值。(country_Id是主要的,因此不能重复) 2)检查不存在的region_id(来自不同的表,其中region_Id也是pk但我们必须在regions表中具有region id才能在countries表中插入相应的值。)
我已经为第一个要求编写了程序。但是,我似乎无法理解如何检查第二个条件。
有人可以指导我吗?
这是我写的代码:
CREATE OR REPLACE PROCEDURE add_vals (c_cntry_id OUT COUNTRIES.COUNTRY_ID%TYPE,
c_cntr_name IN COUNTRIES.COUNTRY_NAME%TYPE,
c_rgn_id IN COUNTRIES.REGION_ID%TYPE);
BEGIN
INSERT INTO countries(COUNTRY_ID, COUNTRY_NAME,REGION_ID)
values (user_seq.nextval, c_cntr_name,c_rgn_id);
c_cntry_id := user_seq.currval;
EXCEPTION
WHEN dup_val_on_index
THEN
c_cntry_id := null;
END;
答案 0 :(得分:0)
可以在国家/地区定义外键约束"指向"到地区:
ALTER TABLE countries
ADD FOREIGN KEY (REGION_ID)
REFERENCES regions (REGION_ID)
这样,如果您尝试在区域中不存在区域ID的国家/地区插入(或更新)行,则插入(更新)将失败。也不允许删除ID在国家/地区引用的地区。如果您想允许,则必须添加ON DELETE <CASCADE | SET NULL>
。 CASCADE
表示也会从其他表中删除该行,因此,如果删除某个区域,则该区域的所有国家/地区都将被删除。 SET NULL
只会在删除区域时将countries表中的所有区域ID设置为NULL。
在你的存储过程中,如果你想在违反时发现错误,你必须添加相应的异常定义,我不记得。