删除两个表中的行

时间:2018-03-21 20:05:13

标签: sql oracle plsql

我有两张桌子

Table 1

Table 2

当我从table1中删除table1.S = Table2.Z和table1.O = 90以及table2.P = 90同时删除table2时,如何制作pl / SQL过程然后作业

2 个答案:

答案 0 :(得分:0)

为删除后事件创建触发器:

CREATE OR REPLACE TRIGGER trg_aftre_table1
AFTER DELETE
  on table1
  FOR EACH ROW 
BEGIN

-- Delete from table2 when delete ant data from table1
delete from  table2  where :OLD.S = Table2.Z and :OLD.O=table2.P ;    
END;

答案 1 :(得分:0)

那将是触发器,而不是过程+作业

以下是一个示例:示例表&触发代码,指定要触发的 WHEN

SQL> create table t1 as
  2    select 50 s, 90 o from dual union
  3    select 51, 90 from dual union
  4    select 50, 10 from dual;

Table created.

SQL>  create table t2 as
  2    select 50 z, 10 p from dual union
  3    select 51, 10 from dual union
  4    select 50, 90 from dual union
  5    select 51, 90 from dual;

Table created.

SQL>
SQL> create or replace trigger trg_ad_t1
  2    after delete on t1
  3    for each row
  4    when (old.o = 90)
  5  begin
  6    delete from t2
  7      where z = :old.s
  8        and p = :old.o;
  9  end;
 10  /

Trigger created.

好的,有些删除:首先,一个不会影响表2的那个:

SQL> delete from t1 where s = 50 and o = 10;

1 row deleted.

SQL> select * From t1;

         S          O
---------- ----------
        50         90
        51         90

SQL> select * From t2;

         Z          P
---------- ----------
        50         10
        50         90
        51         10
        51         90

SQL>

现在,影响表2的那个:

SQL> delete from t1 where s = 50 and o = 90;

1 row deleted.

SQL> select * From t1;

         S          O
---------- ----------
        51         90

SQL> select * From t2;

         Z          P
---------- ----------
        50         10
        51         10
        51         90

SQL>