3. Wprowadzenie do języka SQL
W tej sekcji rozdziału przedstawiamy pierwsze polecenia SQL umożliwiające tworzenie i obsługę pojedynczej tabeli. Zazwyczaj podajemy ich uproszczoną wersję. Pełna składnia tych poleceń jest dostępna w przewodnikach referencyjnych Firebirda (patrz paragraf 2.2).
Z bazy danych korzystają osoby o różnym poziomie kompetencji:
- administrator bazy danych to zazwyczaj osoba biegła w języku SQL i bazach danych. To on tworzy tabele, ponieważ operacja ta jest zazwyczaj wykonywana tylko raz. Z biegiem czasu może zaistnieć potrzeba zmiany ich struktury. Baza danych to zbiór tabel połączonych relacjami. To administrator bazy definiuje te relacje. To również on przyznaje uprawnienia różnym użytkownikom bazy. W ten sposób określa, że dany użytkownik ma prawo przeglądać zawartość tabeli, ale nie może jej modyfikować.
- Użytkownik bazy danych to osoba, która ożywia dane. W zależności od uprawnień przyznanych przez administratora bazy będzie on dodawał, modyfikował i usuwał dane w różnych tabelach bazy. Będzie również je analizował, aby uzyskać informacje przydatne dla sprawnego funkcjonowania przedsiębiorstwa, administracji itp.
W punkcie 2.6 przedstawiliśmy edytor SQL należący do narzędzia [IB-Expert]. To właśnie tego narzędzia będziemy używać. Przypomnijmy kilka kwestii:
- Edytor SQL uruchamia się za pomocą opcji menu [Tools/SQL Editor] lub klawisza [F12]

Pojawi się wtedy okno [SQL Editor], w którym możemy wpisać polecenie SQL:

Powyższy zrzut ekranu jest często przedstawiany za pomocą poniższego tekstu:
3.1. Typy danych w Firebirdzie
Podczas tworzenia tabeli należy określić typ danych, jakie może zawierać kolumna tabeli. Poniżej przedstawiamy najczęściej spotykane typy danych w Firebirdzie. Należy pamiętać, że typy te mogą się różnić w zależności od wersji SGBD.
liczba całkowita w zakresie [-32768, 32767]: 4 | |
liczba całkowita w zakresie [–2 147 483 648, 2 147 483 647]: -100 | |
liczba rzeczywista składająca się z n cyfr, z których m znajduje się po przecinku NUMERIC(5,2): -100,23, +027,30 | |
liczba rzeczywista zaokrąglona do 7 cyfr znaczących: 10,4 | |
liczba rzeczywista zaokrąglona do 15 cyfr znaczących: -100.89 | |
ciąg dokładnie o długości N znaków. Jeśli zapisany ciąg ma mniej niż N znaków, jest uzupełniany spacjami. CHAR(10): „ANGERS ” (4 spacje na końcu) | |
ciąg o długości co najwyżej N znaków VARCHAR(10): 'ANGERS' | |
data: '2006-01-09' (format YYYY-MM-DD) | |
godzina: '16:43:00' (format HH:MM:SS) | |
zarówno data, jak i godzina: '2006-01-09 16:43:00' (format YYYY-MM-DD HH:MM:SS) |
Funkcja CAST() umożliwia konwersję między typami w razie potrzeby. Aby przekształcić wartość V zadeklarowaną jako typ T1 na typ T2, należy wpisać: CAST(V,T2). Możliwe są następujące zmiany typu:
- z liczby na ciąg znaków. Ta zmiana typu odbywa się domyślnie i nie wymaga użycia funkcji CAST. Tak więc operacja 1 + '3' nie wymaga konwersji znaku '3'. Jej wynikiem jest liczba 4.
- DATE, TIME, TIMESTAMP na ciągi znaków i odwrotnie. Tak więc
- TIMESTAMP na TIME lub DATE i odwrotnie
W tabeli wiersz może zawierać kolumny bez wartości. Mówi się wówczas, że wartością kolumny jest stała NULL. Obecność tej wartości można sprawdzić za pomocą operatorów
IS NULL / IS NOT NULL
3.2. Tworzenie tabeli
Aby dowiedzieć się, jak utworzyć tabelę, zaczynamy od utworzenia jej w trybie [Design] z IBExpert. W tym celu postępujemy zgodnie z metodą opisaną w paragrafie 2.3. W ten sposób tworzymy następującą tabelę:

Tabela ta posłuży do rejestrowania książek zakupionych przez bibliotekę. Znaczenie pól jest następujące:
Name | Typ | Ograniczenie | Znaczenie |
Ta tabela, która została utworzona przy pomocy narzędzia IBEXPERT jako kreatora, mogła zostać utworzona bezpośrednio za pomocą poleceń SQL. Aby je poznać, wystarczy przejrzeć zakładkę [DDL] w tabeli:

Kod SQL, który umożliwił utworzenie tabeli [BIBLIO], jest następujący:
- wiersz 1: właściciel Firebird – wskazuje poziom dialektu SQL
- wiersz 2: właściciel Firebird – wskazuje używaną rodzinę znaków
- wiersze 6–14: standard SQL: tworzy tabelę BIBLIO, definiując nazwę i typ każdej z jej kolumn.
- wiersz 16: standard SQL: tworzy ograniczenie wskazujące, że kolumna TITRE nie dopuszcza duplikatów
- wiersz 17: standard SQL: wskazuje, że kolumna [ID] jest kluczem głównym tabeli. Oznacza to, że dwa wiersze tabeli nie mogą mieć tej samej wartości ID. Jest to zbliżone do ograniczenia [UNIQUE NOT NULL] dotyczącego kolumny [TITRE], a zatem kolumna TITRE mogłaby służyć jako klucz główny. Obecnie panuje tendencja do stosowania kluczy głównych, które nie mają znaczenia i są generowane przez SGBD.
Składnia polecenia [CREATE TABLE] jest następująca:
CREATE TABLE tabela (nom_colonne1 type_colonne1 contrainte_colonne1, nom_colonne2 type_colonne2 contrainte_colonne2, ..., nom_colonnen type_colonnen contrainte_colonnen, inne ograniczenia) | |||||||||
tworzy tabelę table z podanymi kolumnami
|
Tabela [BIBLIO] mogłaby również zostać utworzona przy użyciu następującego polecenia SQL:
Zobaczmy, jak to wygląda. Wprowadźmy tę sekwencję w edytorze SQL (F12), aby utworzyć tabelę, którą nazwiemy [BIBLIO2]:

Po wykonaniu należy zatwierdzić transakcję, aby zobaczyć wynik w bazie danych:

Po wykonaniu tej czynności tabela pojawi się w bazie danych:

Klikając dwukrotnie na jej nazwę, można uzyskać dostęp do jej struktury:

Widzimy tu definicję, którą stworzyliśmy dla tabeli [BIBLIO2]
3.3. Usunięcie tabeli
Polecenie SQL służące do usunięcia tabeli ma następującą postać:
DROP TABLE table | |
Supprime [table] |
Aby usunąć właśnie utworzoną tabelę [BIBLIO2], wykonujemy teraz następujące polecenie SQL:

i zatwierdzamy je za pomocą [Commit]. Tabela [BIBLIO2] zostaje usunięta:

3.4. Wypełnianie tabeli
Wstawiamy wiersz do właśnie utworzonej tabeli [BIBLIO]:

Potwierdźmy dodanie wiersza za pomocą [Commit], a następnie kliknijmy prawym przyciskiem myszy na dodanym wierszu:

i poprośmy, jak pokazano powyżej, o skopiowanie wstawionego wiersza do schowka w postaci polecenia SQL INSERT. Następnie otwórzmy dowolny edytor tekstu i wklejmy (Wklej / Paste) to, co właśnie skopiowaliśmy. Otrzymujemy następujący kod SQL:
INSERT INTO BIBLIO (ID,TITRE,AUTEUR,GENRE,ACHAT,PRIX,DISPONIBLE) VALUES (1,'Candide','Voltaire','Essai','18-OCT-1985',140,'o');
Składnia polecenia SQL insert jest następująca:
insert into tabela [(colonne1, colonne2, ..)] wartości (wartość1, wartość2, ....) | |
dodaje wiersz (wartość1, wartość2, ..) do tabeli table. Wartości te są przypisywane do tabel colonne1, colonne2, ..., jeśli istnieją, w przeciwnym razie do kolumn tabeli w kolejności, w jakiej zostały zdefiniowane. |
Aby wstawić nowe wiersze do tabeli [BIBLIO], należy wprowadzić następujące polecenia INSERT w edytorze SQL. Polecenia te należy wykonać i zatwierdzić pojedynczo za pomocą [Commit]. Aby przejść do następnego polecenia INSERT, należy użyć przycisku [New Query].
Po zatwierdzeniu poszczególnych zleceń SQL otrzymujemy następującą tabelę:
![]() |
3.5. Przeglądanie tabeli
3.5.1. Wprowadzenie
W edytorze SQL wpiszmy następujące polecenie:

i uruchommy je. Otrzymujemy następujący wynik:

Polecenie SELECT umożliwia przeglądanie zawartości tabel bazy danych. Polecenie to charakteryzuje się bardzo rozbudowaną składnią. W tym miejscu przedstawiamy tylko tę, która pozwala na zapytanie o jedną tabelę. Kwestia jednoczesnego zapytania o wiele tabel zostanie omówiona w dalszej części. Składnia polecenia SQL [SELECT] jest następująca:
SELECT [ALL|DISTINCT] [*|expression1 alias1, expression2 alias2, ...] FROM table | |
wyświetla wartości z expressioni dla wszystkich wierszy tabeli. expressioni może być kolumną lub bardziej złożonym wyrażeniem. Symbol * oznacza wszystkie kolumny. Domyślnie wyświetlane są wszystkie wiersze tabeli (ALL). Jeśli występuje DISTINCT, wybrane identyczne wiersze są wyświetlane tylko raz. Wartości expressioni są wyświetlane w kolumnie o nazwie expressioni lub aliasi, jeśli została ona użyta. |
Przykłady:



Powyżej przypisaliśmy aliasy (TITRE_DU_LIVRE, PRIX_ACHAT) do żądanych kolumn.
3.5.2. Wyświetlanie wierszy spełniających określony warunek
SELECT .... WHERE condition | |
wyświetlane są tylko wiersze spełniające warunek condition |
Przykłady


Jedna z książek ma gatunek „powieść”, a nie „Powieść”. Używamy funkcji upper, która zamienia ciąg znaków na wielkie litery, aby uzyskać wszystkie powieści.

Warunki można łączyć za pomocą operatorów logicznych
ET logique | |
OU logique | |
Negacja logiczna |



![]()

![]() |

3.5.3. Wyświetlanie wierszy w określonej kolejności
Do powyższych składni można dodać klauzulę ORDER BY określającą żądaną kolejność wyświetlania:
SELECT .... ORDER BY expression1 [asc|desc], expression2 [asc|dec], ... | |
Wiersze wynikające z selekcji są wyświetlane w kolejności 1: rosnącego (asc / ascending, co jest wartością domyślną) lub malejącego (desc / descending) porządku według expression1 2: w przypadku równości wartości expression1 wyświetlanie odbywa się zgodnie z wartościami expression2 itd. |
Przykłady:





3.6. Usuwanie wierszy z tabeli
DELETE FROM table [WHERE condition] | |
usuwa wiersze z table, sprawdzając condition. Jeśli ten ostatni nie istnieje, wszystkie wiersze zostaną usunięte. |
Przykłady:

Poniższe dwa polecenia są wydawane jedno po drugim:

3.7. Modyfikacja zawartości tabeli
update table set kolumna1 = wyrażenie1, kolumna2 = wyrażenie2, ... [where condition] | |
W przypadku wierszy z tabeli table, które sprawdzają zawartość tabeli condition (wszystkie wiersze, jeśli nie ma żadnego warunku), tabela colonnei otrzymuje wartość z tabeli expressioni. |
Przykłady:
Wszystkie rodzaje zapisuje się wielkimi literami:

Sprawdzamy:
![]()
Wyświetlamy ceny:

Ceny powieści wzrosły o 5%:
Sprawdzamy:

3.8. Ostateczna aktualizacja tabeli
Gdy wprowadzamy zmiany w tabeli, Firebird faktycznie generuje je na kopii tej tabeli. Zmiany te można następnie zatwierdzić lub cofnąć za pomocą poleceń COMMIT i ROLLBACK.
COMMIT | |
utrwala zmiany wprowadzone w tabelach od ostatniego uruchomienia COMMIT. |
ROLLBACK | |
cofa wszystkie zmiany wprowadzone w tabelach od ostatniego uruchomienia COMMIT. |
Operacja COMMIT jest wykonywana domyślnie w następujących momentach: a) Przy wylogowaniu z Firebirda b) Po każdym poleceniu wpływającym na strukturę tabel: CREATE, ALTER, DROP. |
Przykłady
W edytorze SQL przywraca się bazę do znanego stanu poprzez zatwierdzenie wszystkich operacji wykonanych od ostatniego COMMIT lub ROLLBACK:
Żądamy listy tytułów:

Usunięcie tytułu:
Weryfikacja:

Tytuł został pomyślnie usunięty. Teraz unieważniamy wszystkie zmiany wprowadzone od ostatniego COMMIT / ROLLBACK:
Weryfikacja:

Tytuł został usunięty. Teraz wygenerujmy listę cen:
![]()
Załóżmy, że wszystkie ceny zostały wyzerowane.
Sprawdźmy ceny:
![]()
Usuńmy zmiany wprowadzone w bazie:
i ponownie sprawdźmy ceny:
![]()
Ceny powróciły do pierwotnych wartości.
3.9. Dodawanie wierszy do tabeli z innej tabeli
Można dodawać wiersze z jednej tabeli do innej, o ile ich struktury są zgodne. Aby to pokazać, zacznijmy od utworzenia tabeli [BIBLIO2] o tej samej strukturze co [BIBLIO].
W eksploratorze baz danych IBExpert kliknijmy dwukrotnie tabelę [BIBLIO], aby uzyskać dostęp do zakładki [DDL]:

W tej zakładce znajduje się lista poleceń SQL, które umożliwiają wygenerowanie tabeli [BIBLIO]. Skopiujmy cały ten kod do schowka (CTRL-A, CTRL-C). Następnie uruchomimy narzędzie o nazwie [Script Executive], które umożliwia wykonanie listy poleceń SQL:

Pojawi się edytor tekstu, w którym możemy wkleić (CTRL-V) tekst umieszczony wcześniej w schowku:

Lista poleceń SQL jest często nazywana skryptem SQL. [Script Executive] pozwoli nam na wykonanie takiego skryptu, podczas gdy edytor SQL umożliwiał wykonywanie tylko jednego polecenia na raz. Obecny skrypt SQL pozwala utworzyć tabelę o nazwie [BIBLIO]. Sprawmy, aby utworzył tabelę o nazwie [BIBLIO2]. W tym celu wystarczy zmienić [BIBLIO] na [BIBLIO2]:
Uruchommy ten skrypt za pomocą przycisku [Run Script] poniżej:

Skrypt został uruchomiony:

i w przeglądarce baz danych widać nową tabelę:

Jeśli dwukrotnie klikniemy na [BIBLIO2], aby sprawdzić jej zawartość, okaże się, że jest pusta, co jest normalne:

Wariant polecenia SQL INSERT pozwala na wstawienie do tabeli wierszy pochodzących z innej tabeli:
INSERT INTO table1 [(colonne1, colonne2, ...)] SELECT kolumna a, kolumna b, ... FROM table2 WHERE condition | |
Wiersze z pliku table2, sprawdzające plik condition, są dodawane do pliku table1. Kolumny colonnea, colonneb, ... z pliku table2 są przypisywane w kolejności do kolumn colonne1, colonne2, ... w pliku table1 i dlatego muszą być typu zgodnego. |
Wróćmy do edytora SQL:

i wygenerujmy następujące polecenie SQL:
które wstawia do pliku [BIBLIO2] wszystkie wiersze z pliku [BIBLIO] odpowiadające powieści. Po wykonaniu polecenia SQL zatwierdźmy je poleceniem [Commit]:
Po wykonaniu tej czynności sprawdźmy dane w tabeli [BIBLIO2]:

3.10. Usunięcie tabeli
DROP TABLE table | |
supprime table |
Przykład: usuwamy tabelę BIBLIO2
Potwierdzamy zmianę:
W eksploratorze baz danych odświeżamy wyświetlanie tabel:

Okazuje się, że tabela [BIBLIO2] została usunięta:

3.11. Modyfikacja struktury tabeli
ALTER TABLE table [ ADD nom_colonne1 type_colonne1 contrainte_colonne1] [ALTER nom_colonne2 TYPE type_colonne2] [DROP nom_colonne3] [ADD contrainte] [DROP CONSTRAINT nom_contrainte] | |
umożliwia dodawanie (ADD), modyfikowanie (ALTER) oraz usuwanie (DROP) kolumn tabeli. Składnia nom_colonnei type_colonnei contrainte_colonnei jest taka sama jak w przypadku CREATE TABLE. Można również dodawać lub usuwać ograniczenia tabeli. |
Przykład: Wykonajmy kolejno dwa poniższe polecenia SQL w edytorze SQL
W eksploratorze baz danych sprawdźmy strukturę tabeli [BIBLIO]:

Zmiany zostały uwzględnione. Zobaczmy, jak zmieniła się zawartość tabeli:

Utworzono nową kolumnę [NB_PAGES], ale nie zawiera ona żadnych wartości. Usuńmy tę kolumnę:
Sprawdźmy nową strukturę tabeli [BIBLIO]:

Kolumna [NB_PAGES] rzeczywiście zniknęła.
3.12. Widoki
Możliwe jest utworzenie widoku częściowego jednej lub kilku tabel. Widok zachowuje się jak tabela, ale nie zawiera danych. Jego dane są pobierane z innych tabel lub widoków. Widok ma kilka zalet:
- Użytkownik może być zainteresowany jedynie niektórymi kolumnami i wierszami danej tabeli. Widok pozwala mu wyświetlać wyłącznie te wiersze i kolumny.
- Właściciel tabeli może chcieć zezwolić innym użytkownikom jedynie na ograniczony dostęp do niej. Widok umożliwia mu to. Użytkownicy, którym udzieli uprawnień, będą mieli dostęp wyłącznie do zdefiniowanego przez niego widoku.
3.12.1. Tworzenie widoku
CREATE VIEW nom_vue AS SELECT kolumna1, kolumna2, ... FROM table WHERE condition [ WITH CHECK OPTION ] | |
tworzy widok nom_vue. Jest to tabela o strukturze kolumna1, kolumna2, ... z table, a wierszami są wiersze z table spełniające warunek condition (wszystkie wiersze, jeśli nie ma warunku) | |
Ta opcjonalna klauzula określa, że operacje wstawiania i aktualizacji w widoku nie mogą tworzyć wierszy, których widok nie mógłby wybrać. |
Uwaga Składnia zapytania CREATE VIEW jest w rzeczywistości bardziej złożona niż ta przedstawiona powyżej i umożliwia w szczególności utworzenie widoku na podstawie kilku tabel. W tym celu wystarczy, aby zapytanie SELECT dotyczyło kilku tabel (patrz następny rozdział).
Przykłady
Tworzymy na podstawie tabeli biblio widok zawierający wyłącznie powieści (wybór wierszy) oraz kolumny tytuł, autor, cena (wybór kolumn):
W eksploratorze baz danych odświeżamy widok (F5). Pojawia się widok:

Można sprawdzić numer porządkowy SQL powiązany z tym widokiem. W tym celu należy dwukrotnie kliknąć widok [ROMANS]:

Widok jest jak tabela. Ma następującą strukturę:

oraz zawartość:

Widok używa się tak samo jak tabelę. Można na nim wykonywać zapytania SQL. Oto kilka przykładów do wypróbowania w edytorze SQL:

Czy nowa powieść jest widoczna w widoku [ROMANS]?

Dodajmy do tabeli [BIBLIO] coś innego niż powieść:
SQL> insert into biblio(id,titre,auteur,genre,achat,prix,disponible) values (11,'Poèmes saturniens','Verlaine','Poème','02-sep-92',200,'o');
Sprawdźmy tabelę [BIBLIO]:

Sprawdźmy widok [ROMANS]:

Dodana książka nie znajduje się w widoku [ROMANS], ponieważ nie miała atrybutu upper(genre)='ROMAN'.
3.12.2. Aktualizacja widoku
Widok można zaktualizować tak samo, jak tabelę. Aktualizacja ta ma wpływ na wszystkie tabele, z których pobierane są dane do widoku. Oto kilka przykładów:
SQL> insert into biblio(id,titre,auteur,genre,achat,prix,disponible) values (13,'Le Rouge et le Noir','Stendhal','Roman','03-oct-92',110,'o')


Usuwamy wiersz z widoku [ROMANS]:


Wiersz usunięty z widoku [ROMANS] został również usunięty z tabeli [BIBLIO]. Teraz podnosimy ceny książek z widoku [ROMANS]:
Sprawdzamy w widoku [ROMANS]:

Jaki wpływ miało to na tabelę [BIBLIO]?

Liczba powieści również wzrosła o 5% w tabeli [BIBLIO].
3.12.3. Usuń widok
DROP VIEW nom_vue | |
usuwa widok o nazwie |
Przykład
W eksploratorze baz danych można odświeżyć widok (F5), aby sprawdzić, czy widok [ROMANS] zniknął:

3.13. Korzystanie z funkcji grupowych
Istnieją funkcje, które zamiast działać na każdym wierszu tabeli, działają na grupach wierszy. Są to głównie funkcje statystyczne, które pozwalają nam obliczyć średnią, odchylenie standardowe itp. dla danych z danej kolumny.
SELECT f1, f2, .., fn FROM table [ WHERE condition ] | |
oblicza funkcje statystyczne fi dla wszystkich wierszy tabeli, sprawdzając ewentualną wartość condition. |
SELECT f1, f2, .., fn FROM table [ WHERE condition ] [ GROUP BY expr1, expr2, ..] | |
Słowo kluczowe GROUP BY powoduje podział wierszy tabeli na grupy. Każda grupa zawiera wiersze, dla których wyrażenia expr1, expr2, ... mają tę samą wartość. Przykład: Słowo kluczowe GROUP BY „gatunek” umieszcza w tej samej grupie książki o tym samym gatunku. Klauzula GROUP BY autor,gatunek umieściłaby w tej samej grupie książki tego samego autora i tego samego gatunku. Klauzula WHERE warunek najpierw eliminuje z tabeli wiersze, które nie spełniają warunku. Następnie tworzone są grupy za pomocą klauzuli GROUP BY. Następnie dla każdej grupy wierszy obliczane są funkcje fi. |
SELECT f1, f2, .., fn FROM table [ WHERE condition ] [ GROUP BY expression] [ HAVING condition_de_groupe] | |
Klauzula HAVING filtruje grupy utworzone przez klauzulę GROUP BY. Jest ona zatem zawsze powiązana z obecnością klauzuli GROUP BY. Przykład: GROUP BY rodzaj HAVING rodzaj!='ROMAN' |
Dostępne funkcje statystyczne fi to:
średnia wyrażenia | |
liczba wierszy, w których wyrażenie ma wartość | |
całkowita liczba wierszy w tabeli | |
maksymalna wartość wyrażenia | |
minimalna wartość wyrażenia | |
suma wyrażenia |
Przykłady
![]()
Średnia cena? Maksymalna cena? Minimalna cena?
![]()

Średnia cena powieści? Cena maksymalna?
![]()
Ile to kosztuje BD?
![]()
Ile powieści kosztuje mniej niż 100 F?
![]()

Ile jest książek i jaka jest średnia cena książki w ramach tego samego gatunku?
SQL> select upper(genre) GENRE,avg(prix) PRIX_MOYEN,count(*) NOMBRE from biblio group by upper(genre)

To samo pytanie, ale tylko w odniesieniu do książek, które nie są powieściami:
SQL>
select upper(genre) GENRE,avg(prix) PRIX_MOYEN,count(*) NOMBRE
from biblio
group by upper(genre)
having upper(GENRE)!='ROMAN'
![]()
To samo pytanie, ale dotyczy wyłącznie książek poniżej 150 F:
SQL>
select upper(genre) GENRE,avg(prix) PRIX_MOYEN,count(*) NOMBRE
from biblio
where prix<150
group by upper(genre)
having upper(GENRE)!='ROMAN'
![]()
To samo zapytanie, ale uwzględniamy tylko grupy, których średnia cena za książkę jest większa niż 100 F
SQL>
select upper(genre) GENRE, avg(prix) PRIX_MOYEN,count(*) NOMBRE
from biblio
group by upper(genre)
having avg(prix)>100
![]()
3.14. Utwórz skrypt SQL dla tabeli „ ”
Język SQL jest standardowym językiem, który można stosować z wieloma skryptami SGBD. Aby móc przechodzić z jednego skryptu SGBD do innego, warto wyeksportować bazę danych lub po prostu niektóre jej elementy w postaci skryptu SQL, który po uruchomieniu w innym środowisku SGBD będzie w stanie odtworzyć elementy wyeksportowane w skrypcie.
W tym miejscu wyeksportujemy tabelę [BIBLIO]. Wybierzmy opcję [Extract Metadata]:

Jak widać powyżej, należy przejść do bazy, z której chcemy wyeksportować elementy. Opcja ta uruchamia kreatora:
![]() |
gdzie wygenerować skrypt SQL:
| |
nazwa pliku, jeśli wybrano opcję [File] | |
co wyeksportować | |
przyciski do zaznaczania (->) lub odznaczania (<-) obiektów do eksportu |
Gdybyśmy chcieli wyeksportować całą bazę, zaznaczylibyśmy powyższą opcję [Extract All]. Chcemy po prostu wyeksportować tabelę BIBLIO. W tym celu za pomocą opcji [4] zaznaczamy tabelę [BIBLIO], a za pomocą opcji [2] wskazujemy plik:

Jeśli na tym poprzestaniemy, wyeksportowana zostanie jedynie struktura tabeli [BIBLIO]. Aby wyeksportować jej zawartość, należy skorzystać z zakładki [Data Tables]:
![]() |
Użyjmy [1], aby wybrać tabelę [BIBLIO]:
![]() |
Użyjmy [2], aby wygenerować skrypt SQL:

Zaakceptujmy ofertę. Dzięki temu możemy zobaczyć skrypt, który został wygenerowany w pliku [biblio.sql]:
- wiersze od 1 do 3 to komentarze
- wiersze od 5 do 12 to kod własnościowy SQL należący do Firebird
- pozostałe wiersze to standardowy kod SQL, który powinien dać się odtworzyć w pliku SGBD zawierającym typy danych zadeklarowane w tabeli BIBLIO.
Uruchommy ponownie ten skrypt w Firebirdzie, aby utworzyć tabelę BIBLIO2, która będzie klonem tabeli BIBLIO. W tym celu użyjmy [Script Executive] (Ctrl-F12):

Załadujmy właśnie wygenerowany skrypt [biblio.sql]:

Zmodyfikujmy go tak, aby zachować tylko część dotyczącą tworzenia tabeli i wstawiania wierszy. Tabela zostaje przemianowana na [BIBLIO2]:
CREATE TABLE BIBLIO2 (
ID INTEGER NOT NULL,
TITRE VARCHAR(30) NOT NULL,
AUTEUR VARCHAR(20) NOT NULL,
GENRE VARCHAR(30) NOT NULL,
ACHAT DATE NOT NULL,
PRIX NUMERIC(6,2) DEFAULT 10 NOT NULL,
DISPONIBLE CHAR(1) NOT NULL
);
INSERT INTO BIBLIO2 (ID, TITRE, AUTEUR, GENRE, ACHAT, PRIX, DISPONIBLE) VALUES (2, 'Les fleurs du mal', 'Baudelaire', 'POèME', '1978-01-01', 120, 'n');
...
COMMIT WORK;
Uruchommy ten skrypt:
![]() | ![]() |
W przeglądarce baz danych możemy sprawdzić, czy tabela [BIBLIO2] została rzeczywiście utworzona i czy ma oczekiwaną strukturę oraz zawartość:
![]() | ![]() |








