Создайте триггер на Удалить клиента, который отображает сообщение «Клиент № 217 удален» - PullRequest
0 голосов
/ 27 апреля 2018

Это домашнее задание. Таблица клиентов состоит из: customer_num, customer_name, улица, город, штат, postal_code, баланс, credit_limit, rep_num. Эта таблица будет связана с таблицей повторений через rep_num, а таблица заказов через customer_num. Я вставил строку в таблицу клиентов, просто чтобы не удалять реальные данные, поэтому мой код для вставки строки:

insert into customer
    values('217','Big Bird','123 Sesame
    Street','Pittsburgh','PA','15301',1.00,100.00,'15');

Затем я устанавливаю вывод сервера на:

set serveroutput on;

Вот мой код, который дает мне отказ "Предупреждение: триггер создан с ошибками компиляции.":

create or replace trigger print_customer_deleted
after delete on customer for each row
begin
delete customer_num
set on customer = on.customer - new.customer_num
where customer_num = :new.customer_num;

dbms_output.put_line('Customer number '||customer_num||
                    ' is deleted');
end;
/

Кроме того, это будет, как мой триггер будет выполняться? :

accept item_num prompt 'Enter customer number to be deleted: ';

execute print_customer_deleted('&customer_num');

1 Ответ

0 голосов
/ 27 апреля 2018

Я создал таблицу TEST на основе DEPT Скотта. Триггер (после удаления в DEPT) удаляет строку из TEST и отображает сообщение.

SQL> select * From dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL> create table test as select * From dept;

Table created.

SQL> create or replace trigger trg_ad_dept
  2    after delete on dept
  3    for each row
  4  begin
  5    delete from test
  6      where deptno = :old.deptno;
  7
  8    dbms_output.put_line('Department #' || :old.deptno ||' is deleted');
  9  end;
 10  /

Trigger created.

Посмотрим, как это работает:

SQL> delete from dept where deptno = 30;
Department #30 is deleted

1 row deleted.

SQL> select * From dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        40 OPERATIONS     BOSTON

SQL> select * From test;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        40 OPERATIONS     BOSTON

SQL>

Кажется, все в порядке - отдел № 30 был удален из обеих таблиц, и сообщение было отображено.

Примените его к вашей ситуации (у меня нет ваших таблиц, а вы не предоставили контрольный пример).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...