在oracle中到达树END

时间:2013-01-18 05:58:04

标签: sql plsql oracle10g

我有一个要求......假设我们有三个表

1.A
primary key a_id

2.B
primary key b_id
foreign key a_id

3.C
primary key c_id
foreign key b_id

这些表格各包含10 records 需要:现在我要删除每个表中的特定记录。记录将作为a_id(表A的主键)提供的值删除。它将从A中删除,但我怎么能从c中删除它,因为它不包含a_id,这只是我们已知的值。

所以怎么做...任何人都可以请让我知道任何方法或任何事情。我需要删除每个表中的特定记录。起始点是a_id,这只是我们所知道的事情。

我使用的是oracle 10g,我不能使用任何sys表。这是dba给予管理员访问权限的要求。

2 个答案:

答案 0 :(得分:1)

你可以在 ON DELETE CASCADE 选项

的帮助下完成

here

答案 1 :(得分:0)

我使用表脚本如下:

CREATE TABLE A (a_id NUMBER CONSTRAINT a_pk PRIMARY KEY,a_grade CHAR(1));
CREATE TABLE b
     (    b_id    NUMBER ,
          b_grade CHAR(1),
          CONSTRAINT b_pk PRIMARY KEY(b_id),
          CONSTRAINT b_fk FOREIGN KEY (b_id) REFERENCES A(a_id) 
          ON DELETE CASCADE );
CREATE TABLE c
     (    c_id    NUMBER,
          c_grade CHAR(1),
          CONSTRAINT c_pk PRIMARY KEY(c_id),
          CONSTRAINT c_fk FOREIGN KEY(c_id)
          REFERENCES b(b_id)
          ON DELETE CASCADE );

BEGIN
INSERT INTO A VALUES(1,'a');
INSERT INTO b VALUES(1,'b');
INSERT INTO c VALUES(1,'c');
end;

/*below is the query that you provide in the table a to delete */

DELETE FROM A WHERE a_id=1;-- all tables values are deleted (parent and childs)

SELECT * FROM A;
SELECT * FROM b;
SELECT * FROM c;

希望这就是你所需要的。