Truncate_table

C/C++PascalSQL

BOOL cd_Truncate_table(cdp_t cdp, ttablenum table);
function cd_Truncate_table(cdp : cdp_t; table : ttablenum) : Boolean;
PROCEDURE Truncate_table(IN tablename CHAR(31));


Parametry

table
číslo tabulky
cdp
kontextová proměnná klienta
tablename
pouze v SQL - jméno tabulky


Od verze

8.1

Popis

Funkce vymaže a uvolní všechny záznamy v zadané tabulce výrazně rychleji než jinými způsoby (mj. proto, že nepracuje s indexy). Smazané a uvolněné záznamy nelze později obnovit funkcí Undelete.

Funkce se neprovede, je-li otevřen editovatelný kurzor z této tabulky nebo jsou-li na tabulku umístěné zámky jiného uživatele. V obou případech bude následná funkce Signalize hlásit chybu "S objektem někdo pracuje". Zámky volajícího uživatele funkci neblokují.

Po provedeni se případný čítač hodnot používaný ve sloupci s implicitní hodnotou UNIQUE nastaví na nulu.

Funkci nelze použít na systémové tabulky. K tabulce musí mít uživatel globální právo rušit záznamy.

Funkce nevolá DELETE triggery. Při mazání záznamů se netestuje platnost referenčních integrit - neopatrné užití může vyvolat nekonzistenci dat! Před i po provedením funkce se vyvolá implicitní commit - nelze odvolat!

Jakožto procedura je implementováno Truncate_table i na straně serveru, aby bylo možno rychle mazat záznamy i z prostředí uložených procedur a triggerů. Jako parametr se používá řetězec se jménem tabulky. Příklad volání v SQL:

CALL Truncate_table("MY_TABLE")

Porovnání rychlostí mazání: mějme tabulku o 60000 záznamech a 4 indexech, bez DELETE triggerů a referenčních integrit. Vymazání obsahu tabulky pomocí DELETE a CALL Free_deleted trvá 18 sekund, pomocí CALL Truncate_table trvá méně než 1 sekundu. Pokud by tabulka obsahovala DELETE triggery a kaskádní mazání v RI, byl by poměr ještě výrazně větší.



Návratová hodnota

Funkce na klientské straně vrací hodnotu FALSE, pokud se akci podařilo úspěšně provést. V opačném případě vrací TRUE a povahu chyby lze zjistit voláním funkce Signalize.

Viz