Příručka aplikace Base 7.3
Příloha A
Běžné úlohy databáze
Tento dokument je chráněn autorskými právy © 2022 týmem pro dokumentaci LibreOffice. Přispěvatelé jsou uvedeni níže. Dokument lze šířit nebo upravovat za podmínek licence GNU General Public License (https://www.gnu.org/licenses/gpl.html), verze 3 nebo novější, nebo the Creative Commons Attribution License (https://creativecommons.org/licenses/by/4.0/), verze 4.0 nebo novější.
Všechny ochranné známky uvedené v této příručce patří jejich vlastníkům.
Pulkit Krishna |
Jenna Sargent |
Steve Fanning |
Vasudev Narayanan |
Olivier Hallot |
|
Randolph Gamo |
Robert Großkopf |
Pulkit Krishna |
Jost Lange |
Hazel Russman |
Jenna Sargent |
Jochen Schiffers |
Jean Hollis Weber |
|
Jakékoli připomínky nebo návrhy k tomuto dokumentu prosím směřujte do fóra dokumentačního týmu na adrese https://community.documentfoundation.org/c/documentation/loguides/ (registrace je nutná) nebo pošlete e-mail na adresu: loguides@community.documentfoundation.org.
Poznámka
Vše, co napíšete do fóra, včetně vaší e-mailové adresy a dalších osobních údajů, které jsou ve zprávě napsány, je veřejně archivováno a nemůže být smazáno. E-maily zaslané do fóra jsou moderovány.
Vydáno Srpen 2022. Založeno na LibreOffice 7.3 Community.
Jiné verze LibreOffice se mohou lišit vzhledem a funkčností.
Některé klávesové zkratky a položky nabídek jsou v systému macOS jiné než v systémech Windows a Linux. V následující tabulce jsou uvedeny nejdůležitější rozdíly, které se týkají informací v této knize. Podrobnější seznam se nachází v nápovědě aplikace.
Windows nebo Linux |
Ekvivalent pro macOS |
Akce |
Výběr v nabídce Nástroje > Možnosti |
LibreOffice > Předvolby |
Otevřou se možnosti nastavení. |
Klepnutí pravým tlačítkem |
Ctrl + klepnutí a/nebo klepnutí pravým tlačítkem v závislosti na operačním systému počítače |
Otevře se místní nabídka. |
Ctrl (Control) |
⌘ (Command) |
Používá se také s dalšími klávesami. |
Alt |
⌥ (Option) |
Používá se také s dalšími klávesami. |
Ctrl+Q |
⌘ + Q |
Ukončí LibreOffice |
Jak se naše databáze rozrůstá a začleňuje do našeho podnikání, bude nutné řešit administrativní úkoly, abychom databázi udrželi v rozumných a bezpečných podmínkách a mohli ji co nejlépe využívat. V této kapitole jsou uvedeny některé informace o datových typech, funkcích a uložených procedurách databáze, příkazech Base UNO, administrativních a opravných procedurách.
Aby bylo možné použít funkci tisku čárového kódu, musí být nainstalováno písmo ean13.ttf. Toto písmo je volně dostupné. Například jako v následující adrese vrácené vyhledávačem: https://graphicore.github.io/librebarcode/documentation/ean13.html
Čárové kódy EAN13 lze vytvořit pomocí souboru ean13.ttf takto:
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
Číslo |
Velká písmena, A=0 B=1 atd. |
* |
Malá písmena, a=0 b=1 atd. |
+ |
Obrázek 1: Schematické uspořádání třináctimístného čárového kódu EAN-13
Viz také dotaz Barcode_EAN13_ttf_command v ukázkové databázi Media_without_Macros.
Tabulka 1: Datové typy celých čísel
Typ |
Možnost |
HSQLDB |
Rozsah |
Velikost v paměti |
Tiny Integer |
TINYINT |
TINYINT |
28 = 256 | – 128 to + 127 |
1 bajt |
Small Integer |
SMALLINT |
SMALLINT |
216 = 65536 | – 32768 do + 32767 |
2 bajty |
Integer |
INTEGER |
INTEGER | INT |
232 = 4294967296 | – 2147483648 do + 2147483647 |
4 bajty |
BigInt |
BIGINT |
BIGINT |
264 |
8 bajtů |
Tabulka 2: Datové typy čísel s plovoucí desetinnou čárkou
Typ |
Možnost |
HSQLDB |
Rozsah |
Velikost v paměti |
Desetinné číslo |
DECIMAL |
DECIMAL |
Neomezený počet, až 50 míst v grafickém uživatelském rozhraní, pevná desetinná čárka, dokonalá přesnost |
proměnná |
Číslo |
NUMERIC |
NUMERIC |
Neomezený počet, až 50 míst v grafickém uživatelském rozhraní, pevná desetinná čárka, dokonalá přesnost |
proměnná |
Float |
FLOAT |
(místo toho se používá DOUBLE) |
|
|
Reálná část |
REAL |
REAL |
|
|
Double |
DOUBLE |
DOUBLE [PRECISION] | FLOAT |
Nastavitelný, ne přesný, maximálně 15 desetinných míst |
8 bajtů |
Tabulka 3: Datové typy textu
Typ |
Možnost |
HSQLDB |
Rozsah |
Velikost v paměti |
Text |
VARCHAR |
VARCHAR |
Nastavitelný |
proměnná |
Text |
VARCHAR_ |
VARCHAR_ |
Nastavitelný, rozsah ovlivňuje třídění |
proměnná |
Text (pevný) |
CHAR |
CHAR | CHARACTER |
Nastavitelný, zbytek aktuálního textu nahrazen mezerami |
pevná |
Memo |
LONGVARCHAR |
LONGVARCHAR |
|
proměnná |
Tabulka 4: Datové typy data a času
Typ |
Možnost |
HSQLDB |
Rozsah |
Velikost v paměti |
Datum |
DATE |
DATE |
|
4 bajty |
Čas |
TIME |
TIME |
|
4 bajty |
Datum/čas |
TIMESTAMP |
TIMESTAMP | DATETIME |
Nastavitelný (0,6 – znamená 6 milisekund) |
8 bajtů |
Tabulka 5: Další datové typy
Typ |
Možnost |
HSQLDB |
Rozsah |
Velikost v paměti |
Ano/Ne |
BOOLEAN |
BOOLEAN | BIT |
|
|
Binární pole (pevné) |
BINARY |
BINARY |
Jako Integer |
pevná |
Binární pole |
VARBINARY |
VARBINARY |
Jako Integer |
proměnná |
Image |
LONGVARBINARY |
LONGVARBINARY |
Jako Integer |
proměnná, určená pro větší obrázky |
OTHER |
OTHER |
OTHER | OBJECT |
|
|
V definicích tabulek a při změně datových typů v dotazech pomocí funkcí „convert“ nebo „cast“ se u některých datových typů očekává informace o počtu znaků (a), přesnosti (g, odpovídající celkovému počtu znaků) a počtu desetinných míst (d). Typy jsou CHAR(a), VARCHAR(a), DOUBLE(g), NUMERIC(g, d), DECIMAL(g, d) a TIMESTAMP(g).
TIMESTAMP(g) může nabývat pouze dvou hodnot: '0' a '6'. '0' znamená, že v desetinné části (desetiny, setiny...) nebudou uloženy žádné sekundy. Přesnost časových značek lze zadat pouze přímo pomocí příkazů SQL. Pokud tedy ukládáme časy z nějakého sportu, musíme předem nastavit TIMESTAMP(6) pomocí Nástroje > SQL.
Tabulka 6: Číselné datové typy
Typ |
Odpovídá v HSQLDB |
Výchozí hodnota |
Poznámky |
Požadavky na paměť |
Integer |
SMALLINT |
0 |
216 = – 32768 až + 32767 |
2 bajty |
Long |
INTEGER |
0 |
232 = – 2147483648 až + 2147483647 |
4 bajty |
Single |
|
0.0 |
Desetinný oddělovač: . |
4 bajty |
Double |
DOUBLE |
0.0 |
Desetinný oddělovač: . |
8 bajtů |
Currency |
Připomíná DECIMAL, NUMERIC |
0.0000 |
4 pevná desetinná místa |
8 bajtů |
Tabulka 7: Další datové typy
Typ |
Odpovídá v HSQLDB |
Výchozí hodnota |
Poznámky |
Požadavky na paměť |
Boolean |
BOOLEAN |
False |
1 = ano, vše ostatní: ne. |
1 bajt |
Datum |
TIMESTAMP |
00:00:00 |
Datum a čas |
8 bajtů |
String |
VARCHAR |
Prázdný řetězec |
Až 65536 znaků |
proměnná |
Objekt |
OTHER |
Null |
|
proměnná |
Variant |
|
Prázdné |
Může přijmout jakýkoli (jiný) datový typ |
proměnná |
Převod dat představuje velké riziko, zejména v případě číselných hodnot. Například primární klíče v databázích jsou nejčastěji typu INTEGER. Pokud jsou tyto hodnoty načítány makrem, musí být proměnná, ve které jsou uloženy, typu Long, protože velikostně odpovídá typu INTEGER v Base. Odpovídající instrukce pro čtení je getLong.
Ve vestavěné HSQLDB jsou k dispozici následující funkce. Jednu nebo dvě funkce však lze použít pouze při volbě Spustit SQL příkaz přímo. Tím se zabrání úpravě těchto dotazů.
Funkce, které pracují s grafickým uživatelským rozhraním, jsou označeny [Funguje v grafickém uživatelském rozhraní]. Funkce, které fungují pouze v přímých příkazech SQL, jsou označeny [Direct SQL – nefunguje v grafickém uživatelském rozhraní].
Poznámka
Protože se zde jedná o čísla s pohyblivou řádovou čárkou, dbejme na nastavení polí v dotazech. Zobrazení desetinných míst je většinou omezeno, takže v některých případech může dojít k neočekávaným výsledkům. Například ve sloupci 1 může být uvedeno 0,00, ale ve skutečnosti obsahuje 0,001 a ve sloupci 2 1000. Pokud je sloupec 3 nastaven tak, aby zobrazoval sloupec 1 * sloupec 2, zobrazí se ve skutečnosti 1.
Tabulka 8: Číselné funkce
Popis |
|
Vrátí absolutní hodnotu čísla. |
|
ACOS(d) |
Vrací arkuskosinus. |
ASIN(d) |
Vrací arkussinus. |
ATAN(d) |
Vrací arkustangens. |
ATAN2(a,b) |
Vrátí arkustangens pomocí souřadnic, kde a je hodnota osy x, b hodnota osy y. |
BITAND(a,b) |
Jak binární tvar a, tak binární tvar b musí mít na stejné pozici 1, aby výsledek byl 1. BITAND(3,5) dává 1; 0011 AND 0101 = 0001 |
BITOR(a,b) |
Buď binární tvar a nebo binární tvar b musí mít na dané pozici jedničku, aby výsledkem byla jednička. BITOR(3,5) yields 7; 0011 OR 0101 = 0111 |
CEILING(d) |
Vrací nejmenší celé číslo, které není menší než d. |
COS(d) |
Vrací kosinus. |
COT(d) |
Vrací kotangens. |
DEGREES(d) |
Převádí radiány na stupně. |
EXP(d) |
Vrací hodnotu d-té mocniny čísla e ( e: (2.718...) ). |
FLOOR(d) |
Vrací největší celé číslo, které není větší než d. |
LOG(d) |
Vrací přirozený logaritmus se základem e. |
LOG10(d) |
Vrátí logaritmus se základem 10. |
MOD(a,b) |
Vrátí zbytek jako celé číslo při dělení 2 celých čísel. MOD(11,3) vrátí 2, protože 3*3+2=11 |
PI() |
Vrací π (3.1415...). |
POWER(a,b) |
ab , POWER(2,3) = 8, protože 2 na 3 = 8 |
RADIANS(d) |
Převádí stupně na radiány. |
RAND() |
Vrátí náhodné číslo větší nebo rovno 0,0 a menší než 1,0. |
ROUND(a,b) |
Zaokrouhluje číslo a na b desetinných míst. |
ROUNDMAGIC(d) |
Řeší problémy se zaokrouhlováním, které vznikají při používání čísel s pohyblivou řádovou čárkou. 3.11-3.1-0.01 není přesně 0, ale v grafickém rozhraní se zobrazuje jako 0. ROUNDMAGIC z ní udělá skutečnou nulovou hodnotu. |
SIGN(d) |
Vrací –1, pokud je d menší než 0, 0, pokud je d rovno 0, a 1, pokud je d větší než 0. |
SIN(A) |
Vrací sinus úhlu v radiánech. |
SQRT(d) |
Vrací druhou odmocninu. |
TAN(A) |
Vrací tangens úhlu v radiánech. |
TRUNCATE(a,b) |
Zkrátí číslo a na b desetinných míst. TRUNCATE(2.37456,2) = 2.37 |
Tabulka 9: Textové funkce
Popis |
|
Vrací kód ASCII prvního písmene řetězce. |
|
BIT_LENGTH(str) |
Vrací délku textového řetězce str v bitech. |
CHAR(c) |
Vrátí písmeno odpovídající ASCII kódu c. |
CHAR_LENGTH(str) |
Vrací délku řetězce str ve znacích. |
CONCAT(str1,str2) |
Spojí řetězce str1 a str2. |
'str1'||'str2'||'str3' nebo 'str1'+'str2'+'str3' |
Spojí řetězce str1, str2 a str3. Jednodušší alternativa ke CONCAT. |
DIFFERENCE(s1,s2) |
Vrací rozdíl v anglické výslovnosti mezi řetězci s1 a s2. Výstupem je pouze celé číslo. 0 znamená, že znějí stejně. Například „for“ a „four“ dávají 0, „king“ a „wing“ dávají 1, „see“ a „sea“ dávají 0. |
HEXTORAW(s1) |
Převádí hexadecimální kód na jiné znaky. |
INSERT(s,start,len,s2) |
Vrací textový řetězec s nahrazenou částí textu. Počínaje znakem "start" se z textu "s" vyřízne délka "len" a nahradí se textem "s2". INSERT(„Bundesbahn“, 3, 4, mmel ) převede Bundesbahn na Bummelbahn, přičemž délka vloženého textu může být větší než délka odstraněného textu, aniž by to způsobilo nějaké problémy. Takže INSERT(„Bundesbahn“, 3, 5, s a B ) dává výsledek „Bus und Bahn“. |
LCASE(s) |
Převede řetězec na malá písmena. |
LEFT(s,count) |
Vrátí počet znaků zadaný pomocí count od začátku řetězce s. |
LENGTH(s) |
Vrací délku řetězce s ve znacích. |
LOCATE(search,s,[start]) |
Vrátí první shodu hledaného výrazu v řetězci s. Shoda je uvedena jako číslo posunu: (1 = vlevo, 0 = nenalezeno). Nastavení počátečního bodu v rámci textového řetězce není povinné. |
LTRIM(s) |
Odstraní počáteční mezery a netisknutelné znaky ze začátku textového řetězce. |
OCTET_LENGTH(str) |
Vrací délku textového řetězce v bajtech. To odpovídá dvojnásobku délky řetězce. |
RAWTOHEX(s1) |
Převádí na šestnáctková čísla, obráceně než HEXTORAW(). |
REPEAT(s,count) |
Opakuje textový řetězec s-krát. |
REPLACE(s,replace,s2) |
Nahradí všechny existující výskyty slova replace v textovém řetězci s, řetězcem s2. |
RIGHT(s,count) |
Opak funkce LEFT; vrací poslední počet znaků na konci textového řetězce. |
RTRIM(s) |
Odstraní všechny mezery a netisknutelné znaky z konce textového řetězce. |
SOUNDEX(s) |
Vrací čtyřznakový kód odpovídající zvuku s. Shoduje se s funkcí DIFFERENCE(). |
SPACE(count) |
Vrací počet mezer. |
SUBSTR(s,start[,len]) |
Zkratka pro SUBSTRING. |
SUBSTRING(s,start[,len]) |
Vrací text s od počáteční pozice (1=vlevo). Pokud je délka len vynechána, je vrácen celý řetězec. |
UCASE(s) |
Převede řetězec na velká písmena. |
LOWER(s) |
Jako LCASE(s). |
UPPER(s) |
Jako UCASE(s). |
Tabulka 10: Funkce data a času
Popis |
|
Vrací aktuální datum. |
|
CURTIME() |
Vrací aktuální čas. |
DATEDIFF(string, datetime1, datetime2) |
Rozdíl data mezi dvěma daty – porovnává hodnoty data a času. Položka v řetězci určuje jednotky, ve kterých se rozdíl vrací: ms=milisekunda, ss=sekunda, mi=minuta, hh=hodina, dd=den, mm=měsíc, yy=rok. Pro řetězec lze použít jak dlouhou, tak krátkou formu. |
DAY(date) |
Vrací den v měsíci (1-31). |
DAYNAME(date) |
Vrací anglický název dne. |
DAYOFMONTH(date) |
Vrátí den v měsíci (1-31). Synonymum pro DAY(). |
DAYOFWEEK(date) |
Vrátí den v týdnu jako číslo (1 představuje neděli). |
DAYOFYEAR(date) |
Vrátí den v roce (1-366). |
HOUR(time) |
Vrací hodinu (0-23). |
MINUTE(time) |
Vrací minutu (0-59). |
MONTH(date) |
Vrací měsíc (1-12). |
MONTHNAME(date) |
Vrací anglický název měsíce. |
NOW() |
Vrátí aktuální datum a aktuální čas společně jako časové razítko. Alternativně lze použít CURRENT_TIMESTAMP. |
QUARTER(date) |
Vrátí čtvrtletí roku (1-4). |
SECOND(time) |
Vrací sekundovou část času (0-59). |
WEEK(date) |
Vrátí týden v roce (1-53). |
YEAR(date) |
Vrátí část roku v položce data. |
CURRENT_DATE |
Synonymum pro CURDATE(), SQL-Standard. |
CURRENT_TIME |
Synonymum pro CURTIME(), SQL-Standard. |
CURRENT_TIMESTAMP |
Synonymum pro NOW(), SQL-Standard. |
Poznámka
Kromě funkce IDENTITY(), která nemá v Base žádný význam, lze všechny tyto příkazy provést pomocí přímého příkazu SQL.
Tabulka 11: Funkce připojení k databázi
Popis |
|
DATABASE() |
Vrací název databáze, ke které toto připojení patří. |
USER() |
Vrací uživatelské jméno tohoto připojení. |
CURRENT_USER |
Standardní funkce SQL, synonymum pro USER(). |
IDENTITY() |
Vrací poslední hodnotu pole automatické hodnoty, které bylo vytvořeno v aktuálním spojení. Používá se v makrech k převodu primárního klíče v jedné tabulce na cizí klíč pro jinou tabulku. |
Tabulka 12: Systémové funkce
Popis |
|
IFNULL(exp,value) |
Pokud je exp NULL, vrátí se value, jinak se vrátí exp. Alternativně lze jako rozšíření použít funkci COALESCE(). Exp a value musí mít stejný datový typ. |
CASEWHEN(exp,v1,v2) |
Pokud je exp true, vrátí se v1, jinak v2. Alternativně lze použít CASE WHEN. CASE WHEN funguje lépe s grafickým uživatelským rozhraním. |
CONVERT(term,type) |
Převede term na jiný datový typ. |
CAST(term AS type) |
Synonymum pro CONVERT(). |
COALESCE(expr1,expr2,expr3,...) |
Pokud expr1 není NULL, vrátí se expr1, jinak se zkontroluje expr2, pak expr3 atd. |
NULLIF(v1,v2) |
Pokud se v1 rovná v2, vrátí se NULL, jinak se vrátí v1. |
CASE v1 WHEN v2 THEN v3 [ELSE v4] END |
Pokud se v1 rovná v2, je vrácena hodnota v3. V opačném případě je vrácena hodnota v4 nebo NULL, pokud neexistuje podmínka ELSE. |
CASE WHEN expr1 THEN v1[WHEN expr2 THEN v2] [ELSE v4] END |
Pokud je expr1 true, vrátí se v1 [volitelně lze nastavit další podmínky]. V opačném případě je vrácena hodnota v4 nebo NULL, pokud neexistuje podmínka ELSE. |
EXTRACT ({YEAR | MONTH | DAY | HOUR | MINUTE | SECOND} FROM <datum nebo čas>) |
Může nahradit mnoho funkcí data a času. Vrátí rok, měsíc, den atd. z data nebo hodnoty data a času. |
POSITION(<řetězcový výraz> IN <řetězcový výraz>) |
Pokud je první řetězec obsažen v druhém, je uvedena odchylka prvního řetězce, jinak je vrácena 0. |
SUBSTRING(<řetězcový výraz> FROM <číselný výraz> [FOR <číselný výraz>]) |
Vytvoří část textového řetězce od pozice zadané ve FROM, volitelně až do délky zadané ve FOR. |
TRIM([{LEADING | TRAILING | BOTH}] FROM <řetězcový výraz>) |
Netisknutelné speciální znaky a mezery jsou odstraněny. |
Pole lze v dotazech propojovat. Dvě pole v
SELECT "Jméno", "Příjmení" FROM "Tabulka"
se stanou jedním polem pomocí:
SELECT "Jméno"||' '||"Příjmení" FROM "Tabulka"
Zde se vkládá další mezera. Může to být jakýkoli znak; pokud je uzavřen v '', bude interpretován jako text. Někdy je však nutné vložit netisknutelné znaky, například nové řádky, například při přípravě zpráv. Zde je krátký seznam řídících znaků. Více informací o nich najdeme na https://en.wikipedia.org/wiki/Control_character.
Tabulka 13: Řídicí znaky pro použití v dotazech
Kód |
Název |
Poznámky |
CHAR( 9 ) |
Vodorovný tabulátor |
|
CHAR( 10 ) |
Posun o řádku |
V dopisech hromadné korespondence a v nástroji Návrhář sestav vytvoří zalomení řádku (Linux, Unix, Mac). |
CHAR( 13 ) |
CR - carriage return (návrat vozíku) |
Zalomení řádku v kombinaci s Carriage return v systému Windows CHAR(13)||CHAR(10). |
Tlačítko může mít přímo navázány různé příkazy UNO. Za tímto účelem je třeba zvolit Vlastnosti: Tlačítko > Činnost > Otevřít dokument / webovou stránku a pak například URL > .uno:RecSearch, aby se otevřela funkce vyhledávání. Často je třeba zvolit Při kliknutí získat zaměření > Ne, pokud akce přistupuje přímo k jinému ovládacímu prvku způsobem, který vyžaduje, aby byl v zaměření, například .uno:Paste, který může vložit obsah schránky.
Následující seznam obsahuje pouze několik příkazů. Všechny příkazy z nástrojové lišty navigace jsou již použitelné v tlačítku, ale lze je také vytvořit pomocí příkazů UNO. Mnoho příkazů lze zjistit pomocí záznamníku maker, který k nim často používá dispečera.
Tabulka 14: Ukázkové příkazy UNO
Příkaz UNO |
Používá se pro ... |
.uno:RecSearch |
Otevření funkce vyhledávání ve formuláři. |
.uno:Paste |
Vložit ze schránky. Funguje pouze pro Při kliknutí získat zaměření > Ne |
.uno:Copy |
Zkopíruje vybraný obsah do schránky. Funguje pouze pro Při kliknutí získat zaměření > Ne |
.uno:Print |
Otevření dialogového okna pro tisk formuláře. |
.uno:PrintDefault |
Tisk na výchozí tiskárně bez zobrazení dialogového okna. |
Uvnitř databáze jsou informace o všech vlastnostech tabulek a jejich vzájemných vazbách uloženy v oblasti INFORMATION_SCHEMA. Tyto informace umožňují vytvářet makra v aplikaci Base, která pro své procedury vyžadují jen velmi málo argumentů. Aplikace je uvedena v příkladové databázi v modulu Údržba – procedura Table_purge pro kontrolu dialogových oken.
V dotazu lze jednotlivé informace a všechna pole, která k nim patří, zadat následujícím způsobem:
SELECT * FROM ″INFORMATION_SCHEMA″.″SYSTEM_ALIASES″
Na rozdíl od běžné tabulky je zde nutné použít INFORMATION_SCHEMA jako předponu k příslušnému názvu z následujícího seznamu:
SYSTEM_ALIASES
SYSTEM_ALLTYPEINFO
SYSTEM_BESTROWIDENTIFIER
SYSTEM_CACHEINFO
SYSTEM_CATALOGS
SYSTEM_CHECK_COLUMN_USAGE
SYSTEM_CHECK_CONSTRAINTS
SYSTEM_CHECK_ROUTINE_USAGE
SYSTEM_CHECK_TABLE_USAGE
SYSTEM_CLASSPRIVILEGES
SYSTEM_COLUMNPRIVILEGES
SYSTEM_COLUMNS
SYSTEM_CROSSREFERENCE
SYSTEM_INDEXINFO
SYSTEM_PRIMARYKEYS
SYSTEM_PROCEDURECOLUMNS
SYSTEM_PROCEDURES
SYSTEM_PROPERTIES
SYSTEM_SCHEMAS
SYSTEM_SEQUENCES
SYSTEM_SESSIONINFO
SYSTEM_SESSIONS
SYSTEM_SUPERTABLES
SYSTEM_SUPERTYPES
SYSTEM_TABLEPRIVILEGES
SYSTEM_TABLES
SYSTEM_TABLETYPES
SYSTEM_TABLE_CONSTRAINTS
SYSTEM_TEXTTABLES
SYSTEM_TRIGGERCOLUMNS
SYSTEM_TRIGGERS
SYSTEM_TYPEINFO
SYSTEM_UDTATTRIBUTES
SYSTEM_UDTS
SYSTEM_USAGE_PRIVILEGES
SYSTEM_USERS
SYSTEM_VERSIONCOLUMNS
SYSTEM_VIEWS
SYSTEM_VIEW_COLUMN_USAGE
SYSTEM_VIEW_ROUTINE_USAGE
SYSTEM_VIEW_TABLE_USAGE
Následující dotaz poskytuje úplný přehled všech tabulek v databázi s typy polí, primárními klíči a cizími klíči:
SELECT
"A"."TABLE_NAME",
"A"."COLUMN_NAME",
"A"."TYPE_NAME",
"A"."NULLABLE",
"B"."KEY_SEQ" AS "PRIMARYKEY",
"C"."PKTABLE_NAME" || '.' || "C"."PKCOLUMN_NAME" AS "FOREIGNKEY FOR"
FROM "INFORMATION_SCHEMA"."SYSTEM_COLUMNS" AS "A"
LEFT JOIN "INFORMATION_SCHEMA"."SYSTEM_PRIMARYKEYS" AS "B"
ON ( "B"."TABLE_NAME" = "A"."TABLE_NAME" AND "B"."COLUMN_NAME" =
"A"."COLUMN_NAME" )
LEFT JOIN "INFORMATION_SCHEMA"."SYSTEM_CROSSREFERENCE" AS "C"
ON ( "C"."FKTABLE_NAME" = "A"."TABLE_NAME" AND
"C"."FKCOLUMN_NAME" = "A"."COLUMN_NAME" )
WHERE "A"."TABLE_SCHEM" = 'PUBLIC'
Pravidelné zálohování dat by mělo být při používání počítače standardem. Záložní kopie jsou nejjednodušším způsobem, jak se vrátit k napůl aktuálnímu stavu dat. V praxi to však často chybí.
Formuláře, dotazy a sestavy lze vždy zkopírovat pomocí schránky do nové databáze, pokud byla uložena předchozí verze databáze. Pokud však z nějakého důvodu již nelze aktuální databázi otevřít, hlavním problémem se stává přístup k datům.
V případě náhlého selhání počítače se může stát, že otevřené databáze (interní databáze HSQLDB) již nelze v LibreOffice otevřít. Místo toho se při pokusu o otevření databáze zobrazí dotaz na filtr odpovídající formátu.
Problém spočívá v tom, že část dat v otevřené databázi je obsažena v pracovní paměti a do mezipaměti se kopíruje pouze dočasně. Teprve po uzavření souboru je celá databáze zapsána zpět do souboru a znovu zabalena.
Pro opětovné získání přístupu k datům může být užitečný následující postup:
Vytvoříme kopii databáze pro následující kroky.
Zkusíme kopii otevřít pomocí archivačního programu. V případě souborů *.odb se jedná o komprimovaný formát, archiv Zip. Pokud soubor nelze otevřít přímo, zkusíme jej přejmenovat z *.odb na *.zip. Pokud se neotevře, je naše databáze již neuložená.
Po otevření databázového souboru v archivačním programu se vždy zobrazí následující složky:
Obrázek 2: Základní struktura souborů komprimovaných do souboru ODB pro "prázdnou" databázi
Soubor databáze musí být dekomprimován. Nejdůležitější informace, pokud jde o data, jsou v podsložce databáze v souborech data a script.
Možná bude nutné se podívat do souboru script a otestovat, zda v něm nejsou rozpory. Tento krok však lze ponechat na fázi testování. Soubor script obsahuje především popis struktury tabulky.
Vytvoříme nový prázdný databázový soubor a otevřeme jej pomocí archivačního programu.
Nahradíme soubory data a script v novém databázovém souboru soubory rozbalenými v kroku 4.
Zavřeme archivační program. Pokud bylo nutné soubor před otevřením v archivačním programu přejmenovat na *.zip (záleží na operačním systému), přejmenujeme jej nyní znovu na *.odb.
Otevřeme databázový soubor v LibreOffice. Měli bychom mít opět přístup ke svým tabulkám.
Jak velkou část dotazů, formulářů a sestav lze podobným způsobem obnovit, je třeba dále testovat.
Viz také: http://forum.openoffice.org/en/forum/viewtopic.php?f=83&t=17125
V praxi obsahuje archivní soubor databáze nejen základní složku pro databázi a složku META-INF, která je určena pro formát OpenDocument, ale také další složky pro ukládání formulářů a sestav. Popis základní struktury formátu OpenDocument najdeme na adrese https://en.wikipedia.org/wiki/OpenDocument_technical_specification.
Následující pohled zobrazuje databázi obsahující tabulky, formulář a sestavu. Není zřejmé, že databáze obsahuje také dotaz. Dotazy nejsou uloženy v samostatných složkách, ale v souboru content.xml. Informace potřebné ke spuštění dotazu jsou jednoduché části kódu SQL.
Obrázek 3: Databázový soubor obsahující kromě tabulek a dotazů také uložené informace pro formulář a sestavu
Zde je náhled jednoho z archivních souborů databáze.
mimetype
application/vnd.oasis.opendocument.base
eine
Tento malý textový soubor obsahuje pouze upozornění, že tento archivní soubor je databázový soubor ve formátu OpenDocument.
content.xml pro databázi bez obsahu
<?xml version="1.0" encoding="UTF-8"?>
<office:document-content
xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML"
xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
xmlns:ooo="http://openoffice.org/2004/office"
xmlns:ooow="http://openoffice.org/2004/writer"
xmlns:oooc="http://openoffice.org/2004/calc"
xmlns:dom="http://www.w3.org/2001/xml-events"
xmlns:db="urn:oasis:names:tc:opendocument:xmlns:database:1.0" xmlns:xforms="http://www.w3.org/2002/xforms"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:rpt="http://openoffice.org/2005/report"
xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:grddl="http://www.w3.org/2003/g/data-view#"
xmlns:tableooo="http://openoffice.org/2009/table"
xmlns:drawooo="http://openoffice.org/2010/draw"
xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/"
office:version="1.2">
<office:scripts/>
<office:font-face-decls/>
<office:automatic-styles/>
<office:body>
<office:database>
<db:data-source>
<db:connection-data>
<db:connection-resource xlink:href="sdbc:embedded:hsqldb"/>
<db:login db:is-password-required="false"/>
</db:connection-data>
<db:driver-settings
db:system-driver-settings=""
db:base-dn=""
db:parameter-name-substitution="false"/>
<db:application-connection-settings
db:is-table-name-length-limited="false"
db:append-table-alias-name="false"
db:max-row-count="100">
<db:table-filter>
<db:table-include-filter>
<db:table-filter-pattern>%</db:table-filter-pattern>
</db:table-include-filter>
</db:table-filter>
</db:application-connection-settings>
</db:data-source>
</office:database>
</office:body>
</office:document-content>
Začíná verzí XML a použitou znakovou sadou. Vše, co následuje, je vlastně jeden nezalomený řádek. Výše připravený pohled by měl vše objasnit. Prvky, které patří k sobě, jsou označeny značkami.
Počáteční definice začínající xmlns: (jmenný prostor XML) udávají jmenné prostory, ke kterým lze přistupovat zevnitř souboru. Pak se uvažuje o poněkud konkrétnějších pojmech. Zde je zřejmé, že máme co do činění s interní databází HSQLDB a že pro přístup není vyžadováno heslo.
content.xml pro databázi s obsahem
Následující obsah je pouze výňatkem ze souboru content.xml, aby byla jasná jeho struktura.
<office:scripts/>
<office:font-face-decls>
<style:font-face style:name="F" svg:font-family=""/>
</office:font-face-decls>
<office:automatic-styles>
<style:style
style:name="co1"
style:family="table-column"
style:data-style-name="N0"/>
<style:style
style:name="co2"
style:family="table-column"
style:data-style-name="N107"/>
<style:style style:name="ce1" style:family="table-cell">
<style:paragraph-properties fo:text-align="start"/>
</style:style>
<number:number-style style:name="N0" number:language="de" number:country="DE">
<number:number number:min-integer-digits="1"/>
</number:number-style>
<number:currency-style
style:name="N107P0"
style:volatile="true"
number:language="de"
number:country="DE">
<number:number
number:decimal-places="2"
number:min-integer-digits="1"
number:grouping="true"/>
<number:text> </number:text>
<number:currency-symbol
number:language="de"
number:country="DE">€
</number:currency-symbol>
</number:currency-style>
Zde je pole definováno jako pole měny. Uvádí se počet desetinných míst, odstup mezi čísly a symbolem měny a samotný symbol měny. V níže uvedeném příkladu se měna a národní prostředí vztahují k Německu.
<number:currency-style
style:name="N107"
number:language="de"
number:country="DE">
<style:text-properties fo:color="#ff0000"/>
<number:text>-</number:text>
<number:number
number:decimal-places="2"
number:min-integer-digits="1"
number:grouping="true"/>
<number:text> </number:text>
<number:currency-symbol
number:language="de"
number:country="DE">€
</number:currency-symbol>
<style:map style:condition="value()>=0" style:apply-style-name="N107P0"/>
</number:currency-style>
Druhý výpis uvádí, že do určité hodnoty by se měna měla zobrazovat červeně („ff0000“).
</office:automatic-styles>
<office:body>
<office:database>
<db:data-source>
Tato položka z výše uvedeného souboru content.xml se všemi svými podpoložkami odpovídá prázdnému souboru archivu databáze.
</db:data-source>
<db:forms>
<db:component
db:name="Receipts"
xlink:href="forms/Obj12"
db:as-template="false"/>
</db:forms>
Soubor archivu databáze obsahuje podsekci, ve kterém jsou uloženy podrobnosti formuláře. Formulář je v uživatelském rozhraní označen jako Receipts.
<db:reports>
<db:component
db: name="Receipts"
xlink:href="reports/Obj12"
db:as-template="false"/>
</db:reports>
Soubor archivu databáze obsahuje také podsekci, ve kterém jsou uloženy podrobnosti o sestavě. Tato sestava je v uživatelském rozhraní označena také jako Receipts.
<db:queries>
<db:query
db:name="Sales_calc"
db:command="SELECT "a".*, ( SELECT "Price" *
"a"."Total" FROM "Stock" WHERE
"ID" = "a"."Stock_ID" ) AS
"Total*Price" FROM "Sales" AS "a""/>
</db:queries>
Všechny dotazy jsou uloženy přímo v souboru content.xml. " znamená dvojité uvozovky. Výše uvedený dotaz v tomto příkladu je ve skutečnosti poměrně složitý a obsahuje mnoho korelovaných poddotazů. Zde jej uvádíme ve zkrácené podobě.
<db:table-representations>
<db:table-representation db:name="Receipts"/>
<db:table-representation db:name="Sales"/>
<db:table-representation db:name="Stock">
<db:columns>
<db:column
db:name="ID"
db:style-name="co1"
db:default-cell-style-name="ce1"/>
<db:column
db:name="MWSt"
db:style-name="co1"
db:gefault-cell-style-name="ce1"/>
<db:column
db:name="Price"
db:style-name="co2"
db:default-cell-style-name="ce1"/>
<db:column
db:name="Stock"
db:style-name="co1"
db:default-cell-style-name="ce1"/>
</db:columns>
</db:table-representation>
</db:table-representations>
To ukazuje, jak se mají zobrazovat různé tabulky. Zde jsou uloženy vlastnosti zobrazení jednotlivých sloupců: v tomto příkladu jsou uložena nastavení pro tabulku Stock s jejími poli – ID, MWSt atd.. Zřejmě zde bylo něco přímo zadáno, čímž se trochu změnily sloupce tabulky.
</office:database>
</office:body>
V souboru content.xml je v podstatě přímo uložen obsah dotazů a informace o vizuálním vzhledu tabulek. Dále je zde definice připojení k databázi. Nakonec přicházejí informace o formulářích a sestavách.
settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<office:document-settings
xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="http://www.w3.org/2000/svg" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
xmlns:ooo="http://openoffice.org/2004/office" xmlns:db="urn:oasis:names:tc:opendocument:xmlns:database:1.0"
office:version="1.2"/>
U databáze bez dalšího obsahu jsou zde uloženy pouze základní definice. S obsahem se ukládají také různá nastavení. Po spuštění výše uvedené definice se uloží následující nastavení z ukázkové databáze.
<office:settings>
<config:config-item-set config:name="ooo:view-settings">
<config:config-item-set config:name="Queries">
<config:config-item-set config:name="Calculate_sales">
<config:config-item-set config:name="Tables">
<config:config-item-set config:name="Table1">
<config:config-item config:name="WindowName"
config:type="string">Verkauf</config:config-item>
<config:config-item config:name="WindowLeft"
config:type="int">153</config:config-item>
<config:config-item config:name="ShowAll"
config:type="boolean">true</config:config-item>
<config:config-item config:name="WindowTop"
config:type="int">17</config:config-item>
<config:config-item config:name="WindowWidth"
config:type="int">120</config:config-item>
<config:config-item config:name="WindowHeight"
config:type="int">120</config:config-item>
<config:config-item config:name="ComposedName"
config:type="string">Verkauf</config:config-item>
<config:config-item config:name="TableName"
config:type="string">Verkauf</config:config-item>
</config:config-item-set>
</config:config-item-set>
<config:config-item config:name="SplitterPosition"
config:type="int">105</config:config-item>
<config:config-item config:name="VisibleRows"
config:type="int">1024</config:config-item>
</config:config-item-set>
</config:config-item-set>
</config:config-item-set>
<config:config-item-set config:name="ooo:configuration-settings">
<config:config-item-set config:name="layout-settings">
<config:config-item-set config:name="Tables">
<config:config-item-set config:name="Table1">
<config:config-item config:name="WindowName"
config:type="string">Verkauf</config:config-item>
<config:config-item config:name="WindowLeft"
config:type="int">186</config:config-item>
<config:config-item config:name="ShowAll"
config:type="boolean">false</config:config-item>
<config:config-item config:name="WindowTop"
config:type="int">17</config:config-item>
<config:config-item config:name="WindowWidth"
config:type="int">120</config:config-item>
<config:config-item config:name="WindowHeight"
config:type="int">120</config:config-item>
<config:config-item config:name="ComposedName"
config:type="string">Verkauf</config:config-item>
<config:config-item config:name="TableName"
config:type="string">Sales</config:config-item>
</config:config-item-set>
<config:config-item-set config:name="Table2">
... (identical config:type-Points as "Table1"
<config:config-item config:name="TableName"
config:type="string">Ware</config:config-item>
</config:config-item-set>
<config:config-item-set config:name="Table3">
... (identical config:type-Points as "Table1"
<config:config-item config:name="TableName"
config:type="string">Receipts</config:config-item>
</config:config-item-set>
</config:config-item-set>
</config:config-item-set>
</config:config-item-set>
</office:settings>
Celý přehled se týká různých zobrazení oken pro dotaz Calculate_sales a tabulek Sales, Stock a Receipts. Poslední dvě jsou zde uvedeny ve zkrácené podobě. Pokud by tato nastavení v chybném souboru *.odb chyběla, nevadilo by to. Při dalším otevření příslušného okna by se znovu vytvořila.
META-INF/manifest.xml
<?xml version="1.0" encoding="UTF-8"?>
<manifest:manifest
xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0">
<manifest:file-entry
manifest:full-path="/"
manifest:media-type="application/vnd.oasis.opendocument.base"/>
<manifest:file-entry
manifest:full-path="database/script"
manifest:media-type=""/>
<manifest:file-entry
manifest:full-path="database/properties"
manifest:media-type=""/>
<manifest:file-entry
manifest:full-path="settings.xml"
manifest:media-type="text/xml"/>
<manifest:file-entry
manifest:full-path="content.xml"
manifest:media-type="text/xml"/>
</manifest:manifest>
Tento soubor ve složce META-INF udává složku s obsahem celého archivu databáze. Protože tento soubor pracuje s prázdnou databází, je v něm pouze pět položek. Databázový archiv, který obsahuje formuláře a sestavy, bude mít mnohem složitější soubor META-INF.
database/properties
#HSQL Database Engine 1.8.0.10
#Sun Jul 14 18:02:08 CEST 2013
hsqldb.script_format=0
runtime.gc_interval=0
sql.enforce_strict_size=true
hsqldb.cache_size_scale=8
readonly=false
hsqldb.nio_data_file=false
hsqldb.cache_scale=13
version=1.8.0
hsqldb.default_table_type=cached
hsqldb.cache_file_scale=1
hsqldb.lock_file=true
hsqldb.log_size=10
modified=no
hsqldb.cache_version=1.7.0
hsqldb.original_version=1.8.0
hsqldb.compatible_version=1.8.0
Soubor vlastností obsahuje základní nastavení interní databáze HSQLDB.
database/script
SET DATABASE COLLATION "German"
CREATE SCHEMA PUBLIC AUTHORIZATION DBA
CREATE USER SA PASSWORD ""
GRANT DBA TO SA
SET WRITE_DELAY 60
Soubor skriptu obsahuje výchozí nastavení pro připojení k databázi, nastavení jazyka atd. Zde se objeví uživatel SA, který bude popsán později.
V databázi s obsahem obsahuje tento soubor základní definice tabulek.
SET DATABASE COLLATION "German"
CREATE SCHEMA PUBLIC AUTHORIZATION DBA
Tabulky jsou definovány před definicí uživatele databáze. Nejprve se v mezipaměti vytvoří tabulky se svými poli.
CREATE CACHED TABLE "Stock"
("ID" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL
PRIMARY KEY,"Stock" VARCHAR(50),"Price" DECIMAL(8,2),"MWSt" TINYINT)
CREATE CACHED TABLE "Sales"
("ID" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL
PRIMARY KEY,"Total" TINYINT,"Stock_ID" INTEGER,"Receipt_ID" INTEGER,
CONSTRAINT SYS_FK_59 FOREIGN KEY("Stock_ID") REFERENCES "Stock"("ID"))
CREATE CACHED TABLE "Receipts"
("ID" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL
PRIMARY KEY,"Date" DATE)
Poté se provedou změny v tabulce, aby se zajistila konzistence relací (REFERENCES).
ALTER TABLE "Sales" ADD CONSTRAINT SYS_FK_76 FOREIGN KEY("Receipt_ID")
REFERENCES "Receipts"("ID")
SET TABLE "Stock" INDEX'608 20'
SET TABLE "Sales" INDEX'1872 1656 1872 12'
SET TABLE "Receipts" INDEX'2232 1'
Po nastavení pozice indexu v datovém souboru (zde se objevuje pouze v souboru skriptu, ale nikdy se nezadává přímo v SQL) se automaticky inkrementující pole v tabulkách (automatické hodnoty) nastaví tak, aby při zadání nového záznamu poskytovala další hodnotu. Předpokládejme, že poslední zadaná hodnota v poli ID tabulky Stock je 19. Automatické zvyšování pak začíná na hodnotě 20.
ALTER TABLE "Stock" ALTER COLUMN "ID" RESTART WITH 20
ALTER TABLE "Sales" ALTER COLUMN "ID" RESTART WITH 12
ALTER TABLE "Receipts" ALTER COLUMN "ID" RESTART WITH 1
CREATE USER SA PASSWORD ""
GRANT DBA TO SA
SET WRITE_DELAY 60
Interní databáze Firebird je v současné době k dispozici pouze jako experimentální funkce. Chceme-li vytvořit takovou databázi nebo upravit již vytvořenou, musíme vybrat Nástroje > Možnosti > LibreOffice > Pokročilé > Volitelné (Nestabilní) možnosti > Povolit experimentální funkce.
Následující odkaz umožňuje nahlásit významné chyby v interní databází Firebird a řešit je společně s týmem LibreOffice: Hlášení chyb pro Firebird v aplikace Base.
Uživatelé si oproti HSQLDB všimnou následujících rozdílů:
Pokud je poli přidělen typ Integer a je deklarováno jako primární klíč, zdá se, že je možné mu přidělit automaticky se zvyšující hodnotu. Při uložení však toto nastavení bez upozornění zmizí.
Při zadávání nových záznamů se tyto záznamy automaticky neukládají do databáze. Tlačítko Uložit je třeba použít pro každou položku. Ve vestavěné HSQLDB není explicitní ukládání záznamů nutné.
Aliasy jsou v dotazech zcela ignorovány. Alias lze vytvořit, ale nezobrazí se v záhlaví tabulky dotazu.
Není možné vytvářet podmínky, ačkoli je externí databáze Firebird podporují.
Desetinné a číselné datové typy jsou v současné době chybné. Tyto typy jsou jediné, které zajišťují přesné hodnoty, zejména pokud se jedná o desetinná místa. Proto jsou preferovanými poli pro hodnoty měn. V současné době lze zadávat pouze hodnoty s nejvýše jedním desetinným místem.
Následující kód zadaný pomocí Nástroje > SQL může pomoci vyřešit problém s neposkytováním automatických hodnot.
CREATE TABLE "Table1" ( "ID" INTEGER NOT NULL PRIMARY KEY, "Name" VARCHAR(20) NOT NULL );
CREATE GENERATOR GEN_T1_ID;
SET GENERATOR GEN_T1_ID TO 0;
Poté je třeba zavřít okno pro zadávání SQL a vybrat Pohled > Obnovit tabulky. Teprve když se tabulka objeví a v některých případech až po (neúspěšném) pokusu o vytvoření záznamu, lze vytvořit následující spouštěč.
CREATE TRIGGER T1_BI FOR "Table1" ACTIVE BEFORE INSERT POSITION 0 AS
BEGIN
IF (NEW.ID IS NULL) THEN NEW.ID = GEN_ID(GEN_T1_ID, 1);
END;
I poté lze v tabulce vytvořit mnoho záznamů v položce Name, aniž by byl vytvořen záznam v položce ID. V poli ID se zobrazuje pouze 0. Teprve po stisknutí tlačítka Update se zobrazí skutečně přiřazené hodnoty. Spouštěč poskytuje hodnoty začínající číslicí 1.