Firebird za 10 minút

Libor Bešenyi  /  08. 01. 2007, 00:00

Ovládate nejaký databázový systém a potrebujete rýchlokurz Firebirdu? Jeden pre Vás máme. Upozorňujeme, že tento článok nie je venovaný čitateľovi, ktorý nepozná SQL, alebo ovláda Firebird, či očakáva obsahovo veľké informácie príručky.

Článok je skôr zameraný pre skupinu ľudí, ktorá ovláda nejaký „svoj“ databázový systém a z určitých dôvodov potrebuje narýchlo „kurz“ Firebirdu (InterBase). Kedysi pred časom som robil s Firebirdom, potom ma služobné povinnosti „odstavili“ zo súkromných projektov a teraz som znova potreboval napísať program s „lacnou“ databázou a našťastie v čase, keď som  robil s Firebirdom, napísal som si poznámky a tak som sa znova nemusel prelúskavať syntaxou.

A tak ma napadlo, že možno aj iní majú s tým problém a teda som sa rozhodol zverejniť tie poznámky, v ktorých nájdete najzákladnejšie potreby, pre „rýchly“ program.

Mne sa do rúk dostal inštalátor Firebird 1.5.3, pri ktorom nebolo potrebné sa preklikať „nextami“ a databáza bola na svete. Súčasťou balíčka je aj vcelku slušne spísaná dokumentácia syntaxe, takže ďalšie smerovanie od základov z tohto článku vedie práve ku nej. Potom je dobré vyskúšať program Firebird Server Control, ktorým môžeme zvoliť či sa bude jednať o službu, resp. „aplikáciu“. No a posledná, tá najdôležitejšia časť je ISQL, ktorý nápadne pripomína konzolu MySQL, či základného Oracle. Trocha mi však chýba pohodlnejšie rozhranie (Interactive na Sybase stále ohováram pre Javu, no tento krát by sa bodlo aj to).

Ešte jedná malá poznámočka, ak modelujeme databázu a chceme pustiť vygenerovaný skript z ISQL, tak to urobíme tak, že napíšeme EDIT [SÚBOR]; otvorí sa notepad, zavrieme ho no ale skript zbehol.

Vytvorenie databázy

CREATE DATABASE [CESTA + SÚBOR S DB] USER ‘[LOGIN]’ PASSWORD '[HESLO]';
Príklad:
CREATE DATABASE 'd:neico.db3'
USER 'SYSDBA'
PASSWORD 'masterkey';

Klasika

Select:
SELECT
  [STLPCE]
FROM [TABULKA]
  [JOINY]
[WHERE
  [PODMIENKA1]
  [OPERATOR PODMIENKA2]]
[GROUP BY
  [PODMIENKA1]
  [OPERATOR PODMIENKA2]]
[HAVING
  [PODMIENKA1]
  [OPERATOR PODMIENKA2]]
[ORDER BY
  [PODMIENKA1]
  [OPERATOR PODMIENKA2]]

Mazanie:
DROP TABLE [TABULKA]
DROP DOMAIN [DOMÉNA]

Zmena:

ALTER TABLE [ZMENA]

Domény

Syntax:
CREATE DOMAIN [NÁZOV] AS [TYP] [DEFAULT HODNOTA] [NOT NULL] [CHCK (PODMIENKA)];
Príklady:

Datum, defaultne NULL:
CREATE DOMAIN TDatum AS DATE DEFAULT NULL;
Boolean z integeru (default FALSE)
CREATE DOMAIN TLogic AS INTEGER DEFAULT 0 NOT NULL
CHECK(VALUE BETWEEB 0 AND 1);

Referencie

Nech existujú tabuľky OBLAST a MESTO. Ak chceme mestá priradzovať do oblasti (napr. okres) a v prípade vymazania tej oblasti, chceme nastaviť hodnotu odkazu na NULL:

ALTER TABLE [tabuľka z: MESTO]
ADD CONSTRAINT [názov referencie] FOREIGN KEY ([Pole MESTO: Oblast])
REFERENCES [tabuľka na: OBLAST] ([Pole OBLAST: OBLAST])
ON [operácia: DELETE] [čo urobiť: SET NULL];

Programový blok

Ak chceme definovať bloky (storované procedúry, triggre apod.) tak v tele pri prvom príkaze s „bodkočiarkou“ sme celý príkaz spustili. Preto je nutné zmeniť terminátor textu:

SET TERM /; <--- TERAZ JE TERMINATOR "/" a “;” môžeme používať bez "execute efektu"
CREATE PROCEDURE ...
BEGIN
  [PRIKAZ]; <--- Kľudne môžeme použiť
END;
/ <--- Až tento znak executne príkaz
SET TERM ;/ <--- Vrátime terminátor do stavu, na ktorý sme zviknutí

Autoinkrementácia Firebirdu

Inkrementačný primárny kľúč nejde zadefinovať ako v MySQL pri vytváraní tabuľky. O Firebirde musíme vytvoriť sekvenciu (generátor) a ten pri vložení záznamu do tabuľky „pretiahneme“ cez funkciu inkrementácie:
CREATE GENERATOR seq_test_id;
CREATE TABLE test (
  field1 INTEGER NOT NULL,
  field2 VARCHAR(10),
  PRIMARY KEY (field1)
);
INSERT INTO test VALUES (gen_id(seq_test_id, 1), 'testme');

Mazanie generátora:

DELETE FROM rdb$generators WHERE rdb$generator_name='[NAZOV]';
Možná automatizácia:

Ak si chceme trocha pomôcť a proces vkladania inkrementačného PK chceme zautomatizovať, jedno z riešení je upraviť before insert trigger (obdoba notifikácie procedúr, ak chceme odchytiť nejakú udalosť):

CREATE GENERATOR seq_test_id;
CREATE TABLE test (
  field1 INTEGER NOT NULL,
  field2 VARCHAR(10),
  PRIMARY KEY (field1)
);

SET TERM /;
CREATE TRIGGER BI_test FOR test ACTIVE BEFORE INSERT
AS
BEGIN
  NEW.field1 = GEN_ID(seq_test_id, 1);
END
SET TERM ;/

INSERT INTO test VALUES (NULL, 'prvy');
INSERT INTO test VALUES (0, 'druhy');
INSERT INTO test VALUES (0, 'treti');
INSERT INTO test (field2) VALUES ('strvty');

SELECT * FROM test

Storované procedúry

Poznámka: neviem ako sa pracuje s doménami a tiež tu nefunguje „dynamický“ argument typu (InCislo INTEGER DEFAULT 0), pričom by bolo možné volať procedúru bez argumentu.

Vytvorenie:

SET TERM !!;
[PROCEDURA]
!!
SET TERM ;!!

Spustenie:
EXECUTE PROCEDURE [NAZOV(argumenty)];
Syntax bez argumentov:
CREATE PROCEDURE [NAZOV]
AS
BEGIN
  [TELO]
END

Syntax s argumentami:
CREATE PROCEDURE [NAZOV] ([ARG1 TYP], [ARG2 TYP] [..])
AS
BEGIN
  ...:[ARG]...   <--- Nutná dvojbodka na začiatku
  [TELO]
END

Syntax s návratovou hodnotou:

CREATE PROCEDURE [NAZOV]
RETURNS ([PREMENNA TYP])   <--- Zátvorky nutné
AS
BEGIN
  :[PREMENNA] = [HODNOTA];
END

Syntax s deklaráciou hodnôt:

CREATE PROCEDURE [NAZOV]
AS
DECLARE VARIABLE
  [PREMENNA1 TYP;]
  [PREMENNA2 TYP;]
  ...
BEGIN
  [:[PREMENNA1] = [HODNOTA];] <--- Nutná dvojbodka na začiatku
END

Všeobecná syntax:
CREATE PROCEDURE [NAZOV] [([ARG1 TYP], [ARG2 TYP] [..])]
[RETURNS ([PREMENNA TYP])]
AS
[
DECLARE VARIABLE
  [PREMENNA1 TYP;]
  [PREMENNA2 TYP;]
  ...
]

BEGIN
  [:[PREMENNA1] = [HODNOTA];] <--- Nutná dvojbodka na začiatku
  [TELO]
END

Rýchly connect na databázu z Delphi 7

Použitie dBExpress technológie je „no comment“ alebo môžeme použiť celkom slušné  borlanďácke komponenty InterBase (keďže Firebird z IB vznikol) a to takto:

IBDatabase.LoginPrompt  nastavíme na FALSE a tak sa nemusí zobrazovať okno s prihlásením.

IBDatabase.DatabaseName nastavíme cestu k súboru.

IBDatabase.Params (alternatíva ku LoginPrompt):
user_name=LOGIN
password=HESLO

IBDatabase.Connected otvoríme spojenie.

Dúfam, že Vám tieto poznámky aspoň trochu pomôžu zorientovať sa pri práci s databázovým systémom FireBird. V prípade akýchkoľvek otázok, použite formulár pre diskusie.

Neprehliadnite: