Databázové a informační systémy II

Datové typy Oracle 8


Datový typ Formát parametrů Popis
BFILE Sloupec nebo proměnná typu BFILE obsahuje odkaz na binární soubor LOB uložený vně databáze na serveru. (max vel. souboru 4GB)
BLOB (Binary large object - Rozlehlý binární objekt) Uchovává nestrukturovaná data jako text, obrázky, video a prostorová data. (max. 4 GB). Doporučuje8 se používat místo RAW a LONG RAW.
CHAR (délka) Textový řetězec pevné délky max. 2000
CLOB (Character large object - rozlehlý znakový objekt) Ukládá dlouhé textové řetězce, (max. 4 GB). Nahrazuje datový typ LONG, poskytuje širší možnosti
DATE Informace o datu a čase, rozsah 1.1.4712 př. n. l. - 31.12.4712 n. l.
FLOAT (počet číslic) Reálné číslo, kde počet číslic může být 1-26
LONG Textový řetězec délky až 2GB - je doporučen už nepoužívat (deprecated)
LONG RAW Dlouhé binární řetězce (do 2 GB)
MLSLABEL Binární formát návěští, které se používá na zabezpečených operačních systémech.
NCHAR (délka) jako typ CHAR podporující národní prostředí
NCLOB Podobný jako CLOB podporující národní prostředí.
NUMBER (počet číslic,přesnost) Číslo libovolného typu, kde přesnost je počet desetinných číslic
NVARCHAR2 (délka) jako typ VARCHAR2 podporující národní prostředí
RAW (délka) Krátké binární řetězce (do 2000 B)
ROWID Binární údaj představující adresu řádku v tabulce
VARCHAR (délka) Textový řetězec proměnné délky max. 4000 - je doporučen už nepoužívat (deprecated)
VARCHAR2 (délka) Textový řetězec proměnné délky max. 4000


Pár poznámek...

Rozdíl mezi typem CHAR a typem VARCHAR2 je v tom, že u CHAR se doplní řetězec mezerami do požadované délky. CHAR se obvykle používá pro příznaky typu ANO-NE a podobně. Používá se jen tehdy, pokud jsme si jisti, že všechny data ve sloupci budou mít stejnou délku.
Datový typ FLOAT je rozšáření datového typu NUMBER a může uložit hodnoty vyšší než typ NUMBER. Používá se obvykle k ukládání vědeckých dat, jako jsou výsledky pokusů, či přesná měření.


Uživatelem definované datové typy

V Oracle 8 můžete vytvářet objekty podle svých potřeb. Je potřeba, abyste měli nainstalovánou Oracle Objects option. Objekt pak vytvoříte příkazem CREATE TYPE.
  CREATE [OR REPLACE] TYPE [schema.]type_name 
  { AS | AS TABLE | AS OBJECT }
  { VARRAY (size) | VARYING ARRAY (size)}
    { OF datatype }
    { REF object_type_name }
    { MAP | ORDER MEMBER function_specification }
    { PRAGMA RESTRICT_REFERENCES fun_spec restrict }
	  
Tímto příkazem můžete vytvořit objektový typ proměnného pole (VARRAY), typ vnořené tabulky nebo neúplný objektový typ, který slouží jako předsunutá (forward) deklarace.
Můžete vytvořit typ AS OBJECT a definovat proměnné (atributy) a podprogramy (metody).
Pomocí volby AS TABLE můžete vytvořit pojmenovanou vnořenou tabulku. Vytvoříte-li tabulku s jedním datovým typem, vnořená tabulka bude představovat tabulku s jedním sloupcem. Vytvoříte-li tabulku tak, že jako datový typ uvedete jiný objekt, tabulka přebere jména sloupců a atributů z tohoto objektu.
Můžete také vytvořit typ AS VARRAY (velikost), což je uspořádaná množina prvků podobná poli. Prvky objektu VARRAY mohou být pouze skalární datové typy, nemohou to být vnořené tabulky nebo jiné objekty.
Volbou REF spojíte instanci zdrojového typu s instancí cílového typu.
Volba MAP MEMBER slouží k určení členské funkce nebo procedury. Můžete uvést pouze jedinou metodu, která musí vracet předdefinovaný skalární datový typ SQL. Metoda nemůže mít parametry jen implicitní parametr SELF.
Můžete deklarovat pouze jednu metodu MAP nebo ORDER, nikoli však současně.
Pro vytvoření objektu můžete také použít příkaz CREATE OR REPLACE, který případný existující objekt nahradí novým. Pokud mahradíte starší objekt, Oracle zneplatní stávající tělo objektového typu a musíte ho znovu přeložit.
Abyste mohli vytvořit objektový typ, musíté mít systémová práva CREATE TYPE nebo CREATE ANY TYPE.

Příkazem CREATE TYPE BODY vytvoříte tělo, které jste uvedli v příkazu CREATE TYPE.
  CREATE [OR REPLACE] TYPE BODY [schema.]type_name { IS | AS }
  { MEMBER procedure_declaration | function_declaration 
    { MAP | ORDER MEMBER function_declaration }
  END;
	  

(c) Miroslav Krupa