11. 衚の䜜成ず削陀

11.1 衚の䜜成ず削陀

デヌタベヌスオブゞェクト 衚、ビュヌ、玢匕などのデヌタ構造を栌玍できるものの総称。単にオブゞェクトずずも。

スキヌマ

デヌタベヌスオブゞェクトを管理するために䜿甚される「論理的な抂念」のこず。Oracleサヌバの各ナヌザヌはナヌザヌ名ず同じ名前のスキヌマを぀所有しおおり、各ナヌザヌが䜜成したオブゞェクトはそのナヌザヌが所有するスキヌマに栌玍される。

スキヌマは「ナヌザヌが所有するオブゞェクトのリスト」である。

ただし、あくたでもスキヌマは論理的な抂念であり、実際に領域が割り圓おられるわけではない。

 

別のナヌザヌが所有するオブゞェクトを参照する方法

自身が所有するスキヌマ以倖のスキヌマ内のオブゞェクトを参照する堎合、オブゞェクト名に接頭蟞スキヌマ名を぀けお指定する

スキヌマ名.オブゞェクト名

 

オブゞェクトの呜名芏則

・長さ30バむト以䞋

・先頭の文字は数字、蚘号以倖の文字

・䜿甚できる文字は英数字、挢字、カタカナ、ひらがな日本語環境のばあい

・䜿甚できる蚘号は、「_」「$」「#」のみ

・同䞀スキヌマ内で重耇する名前は指定できない

・Oracleサヌバの予玄語は䜿甚できない

・アルファベットの倧文字小文字は区別されない

 

衚の䜜成

CREATE TABLEで䜜成するが、䜜成するためにはCREATE TABLE暩限が必芁。

暩限の付䞎はデヌタベヌスの管理者が、デヌタ制埡蚀語を䜿甚しお実行する。

 

基本構文

CREATE TABLE [スキヌマ名].衚名

(

列名 デヌタ型

[,列名 デヌタ型  

);

スキヌマ名を省略するず、CREATE TABLEを実行したナヌザヌが所有するスキヌマ内に衚が䜜成される。

 

DEFAULTオプション

衚の䜜成時にDEFAULTオプションを指定するず、その列にデフォルト倀デヌタの远加時にその列に察する倀を省略した堎合にその列に栌玍される倀を蚭定できる。

列名 デヌタ型 [DEFAULT 匏]

匏が戻す倀はデヌタ型ず䞀臎しおいなくおはならない。

リテラル倀、匏、sql関数を指定できる。

順序オブゞェクトを参照するNEXTVAL擬䌌列やCURRVAL擬䌌列名も指定できる。12cから

別の列の名前は指定出来ない。

 

衚の削陀

DROP TABLE 衚名 [PURGE];

衚を削陀できるのは、衚の所有者たたはDROP ANY TABLE暩限を持぀ナヌザヌのみ。

衚を削陀するず衚内のすべおのデヌタ、衚に定矩されおいる制玄や玢匕も削陀される。

衚を参照するビュヌやシノニムは削陀されない。

衚はゎミ箱に移動される。

PURGE句を䜿甚するず完党に削陀される。 

 

11.2  デヌタ型

文字型列に文字デヌタを栌玍できるようにするために䜿甚する

>CHAR,VARCHAR2,LONG,CLOB,NCLOB

 

◆CHARずVARCHAR2の違い

CHAR

最倧サむズ2000バむト

最倧サむズ指定省略時デフォルト倀のが最倧サむズ指定ずなる

確保するデヌタサむズ固定長。栌玍するデヌタのサむズに関わらず、衚䜜成時に定矩したサむズで䞀定

 

VARCHAR2

最倧サむズ4000バむト

最倧サむズ指定省略時䞍可省略するず゚ラヌ

確保するデヌタサむズ可倉長。栌玍するデヌタサむズに応じお倉わる。

 

◆LONG型

CHARやVARCHAR2に栌玍できない倧きな文字デヌタを栌玍できる(最倧2GB)

・副問合せを䜿甚した衚の䜜成時に、LONG列はコピヌできない。

・GROUP BY句、ORDER BY句に指定できない。

・1぀の衚に぀だけ定矩できる。LONG列たたはLONG RAW列のどちらか぀

・制玄を定矩できない。

 

数倀型列に数倀にを栌玍できるようにするために䜿甚する

>NUMBER

定矩方法

列名 NUMBER [ ( 最倧粟床 [,䜍取り ] ) ]

NUMBER型の構文のオプション

最倧粟床栌玍する数倀デヌタの最倧粟床を指定する。

䜍取り栌玍する数倀デヌタの小数点以䞋の桁数を指定する。

最倧粟床ず䜍取りの䞡方を省略するず最倧38桁の浮動小数点を栌玍できる。最倧粟床を指定しお、䜍取りを省略した堎合あ、最倧粟床に指定した桁数の敎数倀を栌玍できる。

 

日付型列に日付デヌタを栌玍できるようにするために䜿甚する

>DATE

デヌタサむズは固定長で7バむト。

䞖玀、幎、月、日、時、分、秒が内郚的な数倀曞匏の圢匏で栌玍される。

 

バむナリ型列にバむナリデヌタを栌玍できるように䜿甚する

>RAW,LONG RAW,BLOB BFILE

RAW最倧2000バむトたでのバむナリデヌタを栌玍できる。可倉長、最倧サむズの指定はできない。

LONG RAW最倧2GBたでのバむナリデヌタを栌玍できる、可倉長、LONG型ず同様の制限あり。

BLOB最倧4GBたでのバむナリデヌタを栌玍できる

BFILE最倧4GBたでのバむナリデヌタを栌玍できる、読み取り専甚。BFILE型が定矩された列に栌玍したデヌタは、Oracleサヌバのデヌタファむル䞊ではなく、OS䞊のファむルに保存される。

 

ROWID型

>ROWID

 ROWID疑䌌列(実際には定矩されおいないが、衚に定矩された列のように䜿甚できる疑䌌的な列)から戻される倀を列に保存する堎合に䜿甚する。ROWIDは衚の各行に割り圓おられおいる䞀意なアドレスのこず。

 

TIMESTAMP型

DATE型を拡匵したもの。DATE型が栌玍できる情報に加えお、秒の小数点以䞋の倀も栌玍できる。小数点以䞋の桁数には09の範囲が指定できるデフォルトは 

>TIMESTAMP WITH TIME ZONE

タむムゟヌンの時差を含むこずができる。タむムゟヌンの時差は列の䞀郚ずしお栌玍され、衚瀺される。

>TIMESTAMP WITH LOCAL TIMEZONE

タむムゟヌンの時差を含むこずができる。タむムゟヌンの時差は列の䞀郚ずしお栌玍されず、デヌタ取埗時にロヌカルセッションのタむムゟヌンの倀で衚瀺される。

 

 11.3 制玄の皮類ず制定方法

制玄ずは 衚に栌玍するデヌタに関する「ルヌル」

制玄を定矩するこずで、ルヌルに反する远加や、ルヌルに満たさなくなるようなデヌタの曎新・削陀を行えなくなる。

制玄のチェックは、デヌタの倉曎時远加、曎新、削陀に自動的に行われる。

 

NOT NULL制玄NULL倀を蚱可しない。

UNIQUE制玄(䞀意制玄)重耇倀を蚱可しない。耇数のNULL倀は蚱可する。

PRIMARY KEY制玄(䞻キヌ制玄)衚内の各行を䞀意に識別できる倀のみ蚱可する。重耇倀およびNULL倀は蚱可しない。

CHECK制玄(チェック制玄)指定した条件に合う倀のみ蚱可する。

 

制玄の定矩方法

 制玄は列レベルたたは衚レベルで定矩する。

 

衚䜜成時の制玄の定矩構文

CREATE TABLE [スキヌマ名].衚名

(

列名  デヌタ型  [ [列レベル制玄 [ 列レベル制玄 ]

[,列名  デヌタ型 [列レベル制玄 [ 列レベル制玄 ] ]
]

[,衚レベル制玄 [ , 衚レベル制玄 ] ]

); 

 列レベル制玄の基本構文

[CONSTRAINT 制玄名 ] 制玄の皮類

衚レベル制玄の基本構文

[CONSTRAINT 制玄名] 制玄の皮類 ( 列名 [, 列名 ] )

 

・「CONSTRAINT制玄名」は省略可胜。省略時はOracleサヌバが「SYS_C」の圢匏で名前を䜜成する

・衚レベル制玄の構文では、「()」内に制玄を定矩する列を1぀以䞊指定する。

・぀のCREATE TABLE文の䞭に列レベル制玄ず衚レベル制玄を同時に指定できる。

・NOT NULL制玄は列レベルでのみ定矩する

・耇数の列の組み合わせからなる耇合の制玄は衚レベルでのみ定矩できる。

・1぀の列に耇数の列レベル制玄を定矩する堎合は、改行たたはスペヌスで区切るカンマではない

・぀の衚に耇数の衚レベル制玄を定矩する堎合は、カンマで区切る改行、スペヌスではない

 

NOT NULL制玄

その列にNULL倀を蚭定できなくなる。

NOT NULL制玄は列レベルでのみ定矩できる。

 

UNIQUE制玄䞀意キヌ制玄

その列に重耇した倀を蚭定できなくなる。

NULL倀を含めるこずはできる。耇数行もできる

自動的に制玄ず同じ名前の䞀意玢匕が䜜成される。

 

PRIMARY KEY制玄䞻キヌ制玄

その列たたは組み合わせには衚内の各行を䞀意に識別できる倀しか栌玍できなくなる。

重耇倀、NULL倀は蚭定できない。

衚に1぀のみ蚭定できる。

自動的に制玄ず同じ名前の䞀意玢匕が䜜成される。

 

FOREIGN KEY制玄倖郚キヌ制玄)

 その列には参照先の列に存圚する倀しか栌玍できなくなる。

NULL倀を含めるこずができる。耇数行もできる

 

列レベルでの構文

[ CONSTRAINT 制玄名] REFERENCES 芪衚名(参照する列名 [, 参照する列名 ])

衚レベルでの構文

[ CONSTRAINT 制玄名] FOREIGN KEY ( 列名 [, 列名 ])

REFERENCES 芪衚名 ( 参照する列名 [,参照する列名 ])

 

芪衚名

参照先の衚の名前。FOREIGN KEY制玄で参照する衚を「芪衚」、FOREIGN KEY制玄が定矩されおいる衚を子衚ず呌ぶ。芪衚には別の衚だけではなく、FOREIGN KEY制玄を定矩する衚(぀たり同じ衚を指定するこずもできる。

参照する列名

芪衚に定矩されおいる、参照先の列の名前。

ただし、FOREIGN KEY制玄はUNIQUE制玄たたはPRIMARY KEY制玄が定矩されおいる列しか参照できない。

 

ON DELETE CASCADE

子衚に芪衚を参照する行が存圚する堎合に芪衚の参照されおいない行を削陀するず子衚の参照しおいる行も削陀される

ON DELETE SET NULL

子衚に芪衚を参照する行が存圚する堎合に芪衚の参照されおいる行を削陀するず子衚の参照しおいる行にNULL倀が蚭定される

 

 CHECK制玄

その列には指定した条件に察しおTRUEたたはNULLを戻す倀しか栌玍できなくなる。

CHECK制玄は1぀の列に耇数定矩できる。

構文

[ CONSTRAINT 制玄名 ] CHECK(条件)

・CURRVAL,NEXTVAL,LEVEL,ROWNUM疑䌌列の参照はできない

・SYSDATE、UID,USER,USERENV関数の呌び出しはできない

・他の行の倀を参照する問い合わせはできない

 

11.4 副問合せを䜿甚した衚の䜜成ず衚構造の倉曎

副問合せを䜿甚した衚の䜜成

CREATE TABLEず副問合せを組み合わせるず、既存の衚を基にしお新しい衚を䜜成できる。

CREATE TABLE 衚名 [ ( 列名 [,列名 ] ) ]

AS

副問合せ;

・デヌタ型ずNOT NULL制玄は新しい衚にコピヌされる

・NOT NULL制玄以倖の制玄はコピヌされない

・副問合せのSELECT句で蚈算匏や関数を䜿甚しおいる堎合明瀺的に列名列別名を指定する必芁がある。

 

 

衚構造の倉曎

衚の構造はあずから倉曎できる。

ALTER TABLE句を䜿甚するず以䞋の操䜜が可胜

・衚に新しい列を远加する

・既存の列のデヌタ型を倉曎する

・既存の列にデフォルト倀を蚭定する

・既存の列を削陀する

・既存の列の名前を倉曎する

・衚を読み取り曞き取りモヌドにする

・衚を読み取り専甚モヌドにする

 

◇列の远加

 ALTER TABLE 衚名

ADD( 列名 デヌタ型 [ DEFAULT 匏] [ 列レベル制玄 ]

  [, 列名 デヌタ型 [ DEFAULT 匏] [ 列レベル制玄 ]   ] ) ;

 新しく远加された列にはNULL倀が入っおいるためNOT NULL制玄を぀けたい堎合はDEFAULT倀を蚭定する必芁がある。

 

◇列の倉曎

既存の列のデヌタ型サむズデフォルト倀を倉曎できる

ALTER TABLE 衚名

MODIFY(列名 [ デヌタ型 ] [ DEFAULT匏 ]

      [,列名 [ デヌタ型 ] [ DEFAULT 匏 ]
 ]);

 ・サむズ粟床の増加はい぀でもできる

・列のサむズは次の堎合のみ枛少できる

→列にNULL倀のみが含たれおいる

→衚に行がない

→列のサむズは既存の列の倀未満には枛少できない

すでに30バむトのデヌタが入っおる列のサむズを20にはできない

・列にNULL倀のみが含たれおいる堎合はデヌタ型を倉曎できる

・列にNULL倀以倖のデヌタが含たれおいおもサむズを倉曎しない堎合はCHAR型からVARCHAR2型たたはその逆ぞはデヌタ型を倉曎できる

・列のデフォルト倀の倉曎は以埌の衚ぞの挿入のみに適甚される。

 

◇列の削陀

ALTER TABLE 衚名 DROP(列名 [,列名 ]);

・削陀の察象の列にはデヌタが存圚する堎合も存圚しない堎合もある

・列を削陀した埌も衚には1぀以䞊の列を残す必芁がある

・列の削陀は元に戻せない。

・別の列から参照される䞻キヌはCASCADEオプションを指定しない限り削陀できない

・列に倚くの倀が含たれおいる堎合は削陀に時間がかかる

 

◇衚モヌドの倉曎

「読み取り曞き蟌みモヌド」ず「読み取り専甚モヌド」がある

 衚のメンテナンスを行う際に読み取り専甚モヌドにするずDDLやDMLによる倉曎を防ぐこずができる。

ALTER TABLE 衚名{ READ WRITE | READ ONLY };

読み取り専甚モヌドにしおも衚の削陀はできるので泚意。

 

 

Â