sql >> Databáze >  >> RDS >> Oracle

Jak získat počet řádků ovlivněných příkazem, když je uvnitř spouštěče tohoto příkazu

Jedním ze způsobů je použití globální proměnné ke sledování počtu řádků, protože neexistuje žádný jiný způsob, jak získat počet řádků ze spouštěče na úrovni příkazu. Pak byste potřebovali tři spouštěče... jednu úroveň příkazu pro inicializaci proměnné před spuštěním příkazu, jednu úroveň řádku pro přidání jednoho do proměnné pro každý řádek, jednu úroveň příkazu pro použití počtu řádků, jak chcete. Nejprve nastavte proměnnou a několik procedur, které jí pomohou:

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;
/

První spouštěč pro inicializaci proměnné:

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

Druhá aktualizace na řádek:

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;
/

Třetí pro zobrazení součtu:

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. Chyba MySql:1364 Pole 'display_name' nemá výchozí hodnotu

  2. Předávání seznamu<> do SQL uložené procedury

  3. SQL Server:ekvivalent kaskády drop tabulky?

  4. 4 způsoby, jak vypsat všechny tabulky v databázi MySQL