Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да получите броя на редовете, засегнати от оператор, когато е вътре в тригера на този израз

Един от начините е да използвате глобална променлива за проследяване на броя на редовете, тъй като няма друг начин да получите броя на редовете от тригер на ниво израз. Тогава ще ви трябват три тригера... едно ниво на инструкция, за да инициализирате променливата преди изпълнението на оператора, едно ниво на ред, за да добавите по едно към променливата за всеки ред, едно ниво на инструкция, за да използвате броя на редовете, както желаете. Първо, настройте променливата и няколко процедури, за да й помогнете:

create or replace package PKG_ROWCOUNT is
  NUMROWS   number;

  procedure INIT_ROWCOUNT;

  procedure ADD_ONE;

  function GET_ROWCOUNT
    return number;
end PKG_ROWCOUNT;
/

create or replace package body PKG_ROWCOUNT as
  procedure INIT_ROWCOUNT is
  begin
    NUMROWS := 0;
  end;

  procedure ADD_ONE is
  begin
    NUMROWS := Nvl(NUMROWS, 0) + 1;
  end;

  function GET_ROWCOUNT
    return number is
  begin
    return NUMROWS;
  end;
end PKG_ROWCOUNT;
/

Първият тригер за инициализиране на променливата:

create or replace trigger CUSTOMER_CHANGES_TRIGGER_1
  before insert or update or delete
  on CUSTOMERS
begin
  PKG_ROWCOUNT.INIT_ROWCOUNT;
end;

Вторият за актуализиране на ред:

create or replace trigger CUSTOMER_CHANGES_TRIGGER_2
  after insert or update or delete
  on CUSTOMERS
  for each row
begin
  PKG_ROWCOUNT.ADD_ONE;
end;
/

Третият за показване на общата сума:

create or replace trigger CUSTOMER_CHANGES_TRIGGER_3
  after insert or update or delete
  on CUSTOMERS
begin
   Dbms_output.
   PUT_LINE(PKG_ROWCOUNT.GET_ROWCOUNT || ' rows were affected.');
end;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Каква е разликата между свързващите променливи и заместващите променливи (които въвеждам с &&)?

  2. Разделената последователност на Oracle

  3. Стартирайте Oracle Client в 32-битов режим на 64-битова машина

  4. Как да проверя дали съществува съхранена процедура?

  5. Добавете колона, която представлява конкатенация на две други колони Varchar