symfoware certified associate v8 -...

110
Symfoware Certified Associate V8 2007 年 1 月 初版

Upload: others

Post on 11-Jul-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

Symfoware Certified Associate V8

2007 年 1 月 初版

Page 2: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007

Page 3: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007

All Rights Reserved, Copyright © FUJITSU LIMITED 2007

Symfoware Certified Associate V8

2007年1月 初版

富士通株式会社

 

Page 4: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007

Page 5: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Right Reserved, Copyright © FUJITSU LIMITED 2007

i

はじめに

本書は、「Symfoware Certified Associate V8」試験対策のために作成されたテ

キストです。

● Interstage は、富士通株式会社の登録商標です。

● Systemwalker は、富士通株式会社の登録商標です。

● Microsoft®、 Windows は、米国 Microsoft Corporation の米国およびそのほ

かの国における登録商標です。

● Linux は、 Linus Torvalds の米国およびそのほかの国における登録商標また

は商標です。

● UNIX は、米国およびそのほかの国におけるオープン・グループの登録商標で

す。

● IBM は、 IBM Corporation の米国およびその他の国における登録商標です。

● Sun、Sun Microsystems、Solaris およびすべての Solaris に関連する商標は、

米国およびそのほかの国における米国 Sun Microsystems, Inc.の商標または

登録商標であり、同社のライセンスを受けて使用しています。

●その他一般に、会社名、製品名は各社の商標または登録商標です。

●本資料では、 Solaris(TM) Operating System を Solaris と表記しています。

●本資料に記載されているシステム名、製品名などには、必ずしも商標表示 (TM、

®)を付記しておりません。

●そのほか記載された会社名および製品名などは、該当する各社の商標または

登録商標です。

2007 年 1 月 初版

Page 6: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Right Reserved, Copyright © FUJITSU LIMITED 2007

ii

Page 7: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Right Reserved, Copyright © FUJITSU LIMITED 2007

iii

< 目次 >

第 1 章 Symfoware の基本 Symfoware とSQL 1

1.1 データベースとは 2

1.1.1 リレーショナルデータベースとは 3

1.1.2 SQL とは 4

1.2 Symfoware とは 5

1.2.1 データベースシステムの要件 6

1.2.2 Symfoware の実現するソリューション 7

1.2.2.1 高性能を誇るデータベース 8

1.2.2.2 運用を止めずに業務拡張 9

1.2.2.3 大容量データベースの実現 10

1.2.2.4 クラスタアーキによる高速自動切替 11

1.2.2.5 標準テクノロジのサポート 12

1.2.2.6 国際的な標準セキュリティー 13

1.2.2.7 Symfoware Server の製品構成 14

1.2.2.8 Symfoware Server のサービス 15

1.3 SQL の基本操作 16

1.3.1 スキーマと表およびデータベース 17

1.4 データの照会 (検索 ) 18

1.4.1 データの検索( SELECT) 19

1.4.2 条件検索 (WHERE) 20

1.4.2.1 範囲検索 (BETWEEN) 21

1.4.2.2 あいまい検索 (LIKE) 22

1.4.2.3 複数の条件指定 23

1.4.2.4 述語の種類と条件式 24

1.4.3 関数の利用 25

1.4.3.1 関数の種類 26

1.4.4 場合分け( CASE)の利用 27

1.4.5 SQL の共通要素 28

1.4.5.1 データ型の種類 29

1.4.5.2 定数 30

1.4.5.3 データ型と値式 31

1.4.6 データの集計と並べ替え 32

1.4.6.1 グループ化と集計( GROUP BY) 33

1.4.6.2 並べ替え( ORDER BY) 34

1.4.6.3 演算結果によるグループ化 35

1.4.6.4 取出し件数指定( LIMIT) 36

1.4.6.5 演算結果による並べ替え 37

1.4.7 結合 38

1.4.7.1 複数の表を関連づけてデータを取り出す 39

1.4.7.2 表を関連づける条件を指定する 40

1.4.7.3 表の結合時に、条件を満たさない行も取り出す 41

1.4.8 副問合せと問合せ指定 42

Page 8: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Right Reserved, Copyright © FUJITSU LIMITED 2007

iv

1.4.8.1 副問合せ (IN, EXISTS) 43

1.4.8.2 副問合せ (限定述語 ) 44

1.4.8.3 問合せ指定 (導出表 ) 45

1.4.8.4 問合せ指定 (UNION) 46

1.5 データの変更 47

1.5.1 データ追加( INSERT) 48

1.5.2 データ変更( UPDATE) 49

1.5.3 データ削除( DELETE) 50

1.6 トランザクションの管理 51

1.6.1 トランザクション確定( COMMIT) 52

1.6.2 トランザクション取り消し( ROLLBACK) 53

第2章 Symfoware 基本データベースの基礎 55

2.1 DBMSの役割 56

2.2 表の定義と関連定義 57

2.2.1 表の構成 58

2.2.2 スキーマの作成 59

2.2.3 表の定義 60

2.2.4 制約とデフォルト指定 62

2.2.4.1 NOT NULL 制約 63

2.2.4.2 一意性制約 (PRIMARY KEY) 64

2.2.4.3 一意性制約 (UNIQUE) 65

2.2.4.4 デフォルト指定 66

2.2.5 ビュー 67

2.2.5.1 ビューの定義 68

2.2.6 ストアドプロシジャ 69

2.2.7 トリガ 70

2.2.8 インデックス 71

2.2.8.1 インデックスの定義 72

2.3 定義変更 73

2.3.1 表の変更 74

2.4 定義の削除 75

2.4.1 表の削除 76

2.4.2 スキーマの削除 77

2.5 認証とアクセス権限 78

2.5.1 ユーザの認証 79

2.5.2 権限の付与 80

2.5.3 権限の取り消し 81

2.5.4 ロール 82

2.6 トランザクションとは 83

2.6.1 トランザクションの特性 84

2.6.1.1 トランザクションの開始 85

2.6.1.2 トランザクションの終了 86

2.6.2 ロックと排他制御 87

2.6.2.1 独立性水準 88

2.6.2.2 イルシデーションロック 89

Page 9: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Right Reserved, Copyright © FUJITSU LIMITED 2007

v

2.7 Symfoware アーキテクチャ 90

2.7.1 Symfoware のファイル構成 91

2.7.1.1 パラメタファイル 92

2.7.1.2 データベースファイル 93

2.7.1.3 制御ファイル 94

2.7.1.4 ログファイル 95

2.7.2 Symfoware のプロセス構成 96

2.7.3 Symfoware のデータ構造 97

2.7.3.1 表の領域割り当て 98

2.7.3.2 表の領域拡張 99

付録

付録 1 用語集 101

付録 2 模擬問題 128

付録 2-1 解答用紙 137

付録 2-2 出題範囲 138

付録 2-3 正解表 138

付録 2-4 模擬問題と解説 139

Page 10: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007

Page 11: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 1

第1章Symfowareの基本SymfowareとSQL

 データベースについての解説後、Symfowareの基本とSymfowareを操作するために利用するSQLの基本操作に

ついて記述します。

Page 12: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 2

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 2

1.1 データベースとは

階層型データベース

その他のデータベース

リレーショナルデータベース

ネットワーク型データベース

データベースとは、複数利用者によるデータの共有を目的に、データの冗長を少なくし使いやすくしたものです。

データベースは、データの扱い方(データモデル)によって、以下のような種類があります。

 データベースをデータモデルによって分類すると以下のように分類されます。

■階層型データベース

 データを階層関係(1対n:親子関係)で管理する方式です。データ構造を意識してアプリケーションを作成する必要があります。

■ネットワーク型データベース

 データを階層関係(親子関係)だけでなくネットワーク関係(多対多)で管理する方式です。データ構造を意識してアプリケーションを開発する必要があります。

■リレーショナルデータベース

 データを行と列の表および表間の関係(リレーション)で管理する方式です。アプリケーションとデータを分離することができます。そのため、現在のデータベースの主流となっています。

■その他のデータベース

 ・XML型データベース

  データモデルではないが、データをXMLデータの形で管理する方式です。データの構造とデータの関係を  

  XMLにより柔軟に取り扱い、データ検索の自由度を向上できるメリットがあります。リレーショナル他のモデルに  XMLを扱えるようにしたデータベースもあります。

 ・オブジェクト(指向または型)データベース

  データベースにデータ管理とオブジェクト指向言語の概念を取り入れ生産性の向上に着目した方式です。リ    レーショナル他のモデルにオブジェクト指向を加えたものもあります。

 リレーショナルデータベースは、1970年にE.F.Coddにより提唱されたリレーショナルデータモデルにもとづいてい

ます。データの論理的な構造と、物理的な構造の独立性が高いという特長を持っています。つまり、データを扱うプログラムとデータ自身との独立性(データ独立性と呼びます)が高いということです。階層型やネットワーク型のデータベースには、データ構造を変更すると、プログラムを変更しなければならなかったり、データ構造を意識してプログラムを作成しなければならなかったり、といった扱いにくさがありました。リレーショナルデータベースは、こうした扱いにくさを解消しています。そのためリレーショナルデータベースは、現在のデータベースの主流として非常に広く使われています。

Page 13: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 3

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 3

1.1.1 リレーショナルデータベースとは

販売表販売表

表には「表名」が定義されます

列には「列名」が定義されます

189730291302

製品番号

318

72

個数

5,400,000東京5/17600,000シドニー6/1

630,000ロンドン5/15

300,000ニューヨーク5/10売上金額販売店販売日

販売に関するデータ

表表

列列

行行

表とは

 リレーショナルデータベースでは、データを行と列で構成される2次元の表として扱います。表は以下のような特徴をもっています。

 ■1つのデータは1つの列に格納されます。

 ■いくつかの列を組みにしたものが1つの行となります。

 ■いくつかの行を集めたものが1つの表となります。

 ■表は管理するデータの内容に応じて複数作成することができます。

 表の基本的な操作には以下のものがあります。

 ■表から任意の列を指定して指定の列だけのデータを取り出すことができます。

 ■表に条件指定を行って、条件に合う行だけを取り出すことができます。

 ■必要に応じて、関係を持っている複数の表を条件指定で結合して、関連するデータを取り出すことができます。

Page 14: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 4

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 4

1.1.2 SQLとは

1987年初版の標準規格化

リレーショナルデータベースの標準言語

多くのリレーショナルデータベースで採用

 リレーショナルモデルのデータベースを操作する言語として、Structured Query Language:構造化問合せ言語(SQL)が、IBM社により初期開発され、各社のリレーショナルデータベースの操作言語も類似のものが利用されてきましたが、1987年にそれらを統一してSQLとして規格化されています。標準規格化されたSQLは省略形ではなく固有名詞で“エスキューエル”と呼びます。その後、規格の拡張も進み、多くのリレーショナルデータベースでSQLが採用されてきたことによって、現在はリレーショナルデータベースの標準言語になってきております。

 SQLは標準規格化されてはいますが、リレーショナルデータベースの提供ベンダが規格のすべてに準拠している

わけではありません。ベンダによって一部を採用して、一部は独自に拡張を行っています。またオプションを指定して初めて準拠するデータベースもあります。そのため、基本概念や共通的な操作方法についてはベンダ間で同じですが、SQLの記述方法には差異があります。

 

Page 15: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 5

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 5

1.2 Symfowareとは

Symfoware は、リレーショナルデータベースを提供するデータベース管理システム

SymfowareSymfoware は、リレーショナルデータベースは、リレーショナルデータベースを提供するデータベース管理システムを提供するデータベース管理システム

データベースデータベース

(データ)(データ)

データベース管理システム

データベース管理システム

データベース管理システム

利用者

利用者

利用者

アプリケーションソフトウェア

アプリケーションソフトウェア

アプリケーションソフトウェア

アプリケーションソフトウェア

アプリケーションソフトウェア

 Symfowareは、富士通株式会社が開発したリレーショナルデータモデルをサポートするデータベース管理システ

ム(リレーショナルデータベース管理システム)です。

 Symfowareは、標準規格化されたSQLの規約にデフォルトのまま準拠しているデータベース管理システムです。

 Symfowareは、高性能で高信頼なデータベースエンジン(*)を持ち、インターネットビジネス時代のミッションクリティ

カルシステムおよび戦略的な情報活用の支援に適したデータベースシステム(*)です。

 以降データベースシステムの要件、Symfoware の実現するソリューション、Symfoware Serverの製品構成につい

て説明します。

【データベースで利用される一般的な用語(慣用語)について】

 リレーショナルデータベースは、SQLによるデータベースの操作やデータベースの運用を管理する「基本ソフトウェ

ア」、実際のデータベースの「データ」、データベースのデータを利用してデータベースシステムとしての機能を提供する「アプリケーションソフトウェア」等から構成されています。この基本ソフトウェアを「データベース管理システム」と呼びます。また、データベース管理システムそのもの、またはその骨格部分のことを「データベースエンジン」と呼ぶことがあります。データベースシステムは、アプリケーションソフトウェアも含めたデータベース全体を含めた意味ですが、データベース管理システムを省略して「データベースシステム」と記述する場合もあります。

Page 16: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 6

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 6

1.2.1 データベースシステムの要件

データベースシステムデータベースシステムに求められる要件に求められる要件

多くの利用者が使用してもレスポンスを保証したい

多くの利用者が使用してもレスポンスを保証したい

膨大なデータを運用したい膨大なデータを運用したい 利用者の急増にともないシステムを拡張したい

利用者の急増にともないシステムを拡張したい

高性能高性能高性能

拡張性拡張性拡張性

サービスを続けながら運用・メンテナンスしたい

サービスを続けながら運用・メンテナンスしたい

ハード・トラブルが発生しても速やかにサービス再開

ハード・トラブルが発生しても速やかにサービス再開

高信頼性高信頼性高信頼性高可用性高可用性高可用性

運用性運用性運用性

 インターネットビジネス時代におけるデータベースシステムの要件には、「利用者の急増/サービスの拡大」、「データ量の急増」、「途切れることにないサービス」といった特徴があります。これらの特徴には、常に、高性能が要求されています。多くの利用者が使用していても、レスポンスを保証しなければなりません。もちろん、大容量のデータベースであっても、データの保守が同時に走行していても、高いレスポンスを保証する必要があります。そのような意味で、高性能は、インターネット環境において も重要な要件といえます。

 また、24時間連続運転やサービスを続けながら運用や保守をしたいという高可用性、膨大な顧客のデータや取引データを蓄積して運用したいという運用性、利用者の急増やビジネスの拡大に対して柔軟に対応したいという拡張性が要求されています。さらに、完全には拭い去れないハードトラブルが万が一発生したとしても、早急に対処しサービスを再開したいという高信頼性が要求されています。

インターネットビジネス時代における、データベースが実現すべき要件は5つにまとめられます。

 ・高性能

 ・高可用性

 ・運用性

 ・拡張性

 ・高信頼性

Page 17: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 7

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 7

1.2.2 Symfowareの実現するソリューション

拡張性拡張性拡張性

高性能を誇るDBシステム実績

高性能を誇るDBシステム実績

高性能高性能高性能

24時間365日

途切れることのないサービス無停止で保守・運用

24時間365日

途切れることのないサービス無停止で保守・運用

高可用性高可用性高可用性

大容量データベースの運用を実現するユーティリティ

大容量データベースの運用を実現するユーティリティ

ネットワークを支える標準テクノロジーサポート

ネットワークを支える標準テクノロジーサポート

世界標準規格ISO15408EAL4準拠

世界標準規格ISO15408EAL4準拠

セキュリティセキュセキュリリティティ

ミッションクリティカルを支えるクラスタ・アーキテクチャ

ミッションクリティカルを支えるクラスタ・アーキテクチャ

運用性運用性運用性

標準技術標準技術標準技術

高信頼性高信頼性高信頼性

 データベースシステムの要件に対して、Symfoware Serverは包括的なソリューションを提供しています。高性能に対しては、データベースシステムの業界標準ベンチマーク試験であるTPC-Cで実証されております。SymfowareServerは世界 高レベルのデータベース性能を提供しています。また、これまでの実績として数々の高性能システムを実現してきています。高可用性に対しては、24時間365日無停止でデータベースシステムの保守・運用をする

ための機能を提供しています。運用性に対しては、データが大容量化しても限られた時間で運用を可能とするためのデータベースのパーティショニング技術を利用した高性能ユーティリティーを提供しています。さらに、クラスタ・アーキテクチャにより、複数のサーバを結合することで、ミッションクリティカルにおける拡張性、高信頼性を実現しています。

 また、Symfoware Serverは、以下のネットワークテクノロジーをソリューションとして備えることにより、インターネット時代のビジネスシステムに融合するデータベースとなります。特にインターネットビジネスの益々の拡大に伴い、セキュリティーに関する要件が次第に重要となってきています。

 ・標準技術

 ・セキュリティ

 ネットワーク上にシステムを構築するためのテクノロジーとして、JavaやXMLといった 新の標準技術を取り入れ

ることによって、アプリケーションの流用性を高め、システム生産性の向上を図っています。また、ネットワーク環境で運用するために必須である高いセキュリティ機能も実装しています。Symfoware Serverのセキュリティは、世界標準規格ISO15408の商業システムにおける 高水準であるEAL4に準拠しています。このようなテクノロジーを使うこ

とによって、インターネット環境におけるデータベースシステムを効率的に構築することができ、かつ、高い信頼性を持ったシステムを構築することができます

Page 18: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 8

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 8

1.2.2.1 高性能を誇るデータベース

■ 高性能を誇るデータベース

 Symfoware Serverの性能は、データベースシステムの業界標準ベンチマーク試験であるTPC-Cで実証されてお

ります。

 Symfoware Serverは世界 高レベルのデータベース性能を提供しています。これらの性能を達成するために、

CPUやメモリを効率的に利用する多くの高速化技術を適用しています。

 例えば、大規模なデータベースシステムで多くのお客様が同時利用される銀行システムを代表として取り上げると、複数の利用者が同時に利用した場合も利用者間のデータベースの競合による遅延がなく一定時間内に処理する必要があります。 Symfoware Serverは、異なる利用者間の同時利用時、競合なく一定時間内に処理が可能な

並列技術によりこれを実現しています。

 また、自動振込や利子の加算など、一人の利用者の通帳に対して複数の処理が同時に動作する可能性もあります。Symfoware Serverは、このような場合にも、データの整合性を保ちつつ同時に処理することができます。

Page 19: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 9

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 9

1.2.2.2 運用を止めずに業務拡張

 Symfoware Serverでは、あらゆる処理がサービスを停止することなく実行できます。サービスを止めずに、メンテ

ナンスを実行したり、業務を拡張、変更することもできます。

 データベースの運用として も重要なバックアップも、業務が運用中であっても実施することができることは当然として、データの異常が発生した場合のリカバリもユーザのデータだけでなく、システムのファイルに異常が発生した場合すら、サービスを止めることなくリカバリすることができます。例えばディスクにハード障害が発生してその中にシステムのファイルが格納されていた場合でも、システムファイルの内容をメモリに記憶したまま運用を継続する高度な技術を利用します。運用を継続したまま復旧ができます。

 また、復旧だけでなく業務の新規サービスのためのメンテナンスも、既存サービスを停止しないで追加できます。

 代表例として、運用を停止しないで業務を拡張する例を示します。

■運用を止めずに、業務を拡張

 インターネットビジネスにおいて、新しいサービスに必要な情報が追加されると、Symfoware Serverでは、表の定義に新しい列を追加することができます。もちろん、その表に対してのアクセスを止める必要はありません。つまり、既存の列に対しては参照、更新処理が動作している状況で、新しい列を追加することができます。そして、この新しい列を利用するアプリケーションを実行することができます。言い換えれば、サービスの運用を続けたまま、既存のサービスを拡張した新しいサービスの運用を開始することができるのです。

 Symfoware Serverは、データをDSIと呼ばれる単位に分割すること(パーティショニング技術)によって、データベー

スのメンテナンスの単位も分割単位に行えます。たとえば、新しい支店が増えた場合にも、その支店の情報を格納するためのDSIを増設することによって、他の支店のサービスを一切停止せずに、新しい支店のサービスを立ち上

げることができます。インターネットビジネスにおける、サービスの運用を実施しながら新しいサービスを追加したい、または、既存のサービスを変更したいという要件に対応していくことができます。

Page 20: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 10

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 10

1.2.2.3 大容量データベースの実現

■大容量データベースの実現

 ミッションクリティカルな業務では、大量データに対して、現実的な時間でのデータのバックアップ、データの創成、データのリカバリが保証できるものでなければなりません。処理データ量が少ない場合には問題にならなかった運用時間が、データ規模が急増すると、一般的な方法では実運用に耐えられない時間となる可能性があります。それにより、一日のデータのメンテナンスがその日中に終わらなくなってしまい、運用が破綻してしまう危険性もあります。

 Symfoware Serverは、データを一括で処理するための 高性能のユーティリティを完備しており、データ量に対し

てリニアな性能を保証しています。さらに、インターネットビジネスへのさらなる働きかけとして、さまざまな形態のユーティリティを提供し、各種のデータの保守を簡単に、かつ、高速に実行できます。また、ハード技術を利用したデータベースのバックアップ運用の自動化によるコストの削減も図っています。

■大容量を操作する分散アーキテクチャ

 Symfoware Serverは、データをDSIと呼ばれる単位に分割すること(パーティショニング技術)によって、複数のディ

スク上にデータを分散配置し並列処理可能です。データ量に応じてパーティショニングを行い、柔軟な拡張性を保証しています。データが多くなると、スケーラブルログと呼ぶログを複数に分散する技術を利用します。さらにデータが多くなると、ロードシェアと呼ばれる、ログだけでなくCPUやメモリを分散する機能を利用します。このようにパーティショニングの概念を利用して、柔軟性のある拡張が可能になっています。Symfoware Serverは全ての製品に標準でパーティショニングを提供しているため、スムースに規模の拡大が可能です。

Page 21: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 11

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 11

1.2.2.4 クラスタアーキによる高速自動切替

■クラスタアーキによる高速自動切替

 インターネットシステムは、高度な信頼性を競争する時代を迎え、その取引データを格納するデータベースの信頼性も、メインフレーム以上の信頼性を要求されることになります。また、ミッションクリティカルな業務で必要なデータベースシステムは、データ規模の増大、処理量の増加、利用者のニーズの多様化に対して、性能面およびシステム構築面におけるスケーラビリティの保証が重要な要素となります。

 Symfoware Serverは、はクラスタ(複数のマシンを連動させること)を用いた冗長性により、高い信頼性、拡張性を

保証します。高い信頼性に対しては、フェイルオーバを提供します。拡張性に対しては、ロードシェアを提供します。

 ・フェイルオーバ

   Symfoware Serverのフェイルオーバは、サービスの停止時間を 小化するために、運用サーバに異常が発生

  した場合には、高速にサーバを切り替え、待機サーバが運用を引き継いで継続します。このようにサーバを運   用サーバから待機サーバへ高速に切り替えることによって、異常が発生しても、途切れることのないサービスを  提供します。

 ・ロードシェア

   ロードシェアとは、クラスタシステム上で、複数のサーバに分散配置したリレーショナルデータベースを並列に  処理することで、スケーラビリティのあるシステム運用を実現する機能です。

 さらに、Connection Managerを用いて、複数のマシンへのコネクション(接続)を自動制御することによって、これら

のクラスタ・アーキテクチャの構築をシンプルなものとします。

 ・運用と待機の2つのサーバを1つのサーバに見せます。アプリケーションは、データベースシステムが運用サー   バと待機サーバに分かれていることを意識する必要がありません。

 ・ロードシェア運用におけるサーバへの負荷の分散を自動的に行います。アプリケーションからは複数サーバが   一つであるかのように処理されます。

Page 22: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 12

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 12

1.2.2.5 標準テクノロジのサポート

■標準テクノロジのサポート

 ネットワークを支えるテクノロジーとして、 も重要なもののひとつに、Java技術があります。プラットフォーム無依存で開発可能なJava技術を採用することで、システムの効率的な開発が可能になります。また、関連重要技術として、XML技術が挙げられます。

 Symfoware Serverは、Interstageと連携することによって、ネットワーク上のあらゆる標準プロトコル、CORBA 、EJB 、Web連携、XMLを核とするSOAPといったプロトコルに対応しています。さらに、これら各種のプロトコルを用いて処理するためのアプリケーションを実行するフレームワークとして、J2EEや、JTAあるいは、XML技術をサポートしています。このようにSymfoware Serverは、Interstageと連携することによって、アプリケーションサーバに必要な

標準プロトコル、標準技術をサポートしています。

 さらに、データベースサーバ上にも、これらのアプリケーションサーバと柔軟に連携するための標準技術であるプロシジャやトリガなどの機能をサポートしています。これらの機能を使用することによって、データベースサーバは、単なるデータを格納する箱ではなく、アプリケーションロジックを組み込むことができ、それらのロジックを共有することによって、アプリケーションの生産性を上げることができます。

 Symfoware Serverへアクセスするアプリケーションの開発には、Visual BasicやVisual C++など使い慣れたプログラミングアプリケーションに対応したアプリケーションインタフェース(API)を提供しているため、簡単にデータベース

へアクセスするアプリケーションを開発することができます。

Page 23: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 13

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 13

1.2.2.6 国際的な標準セキュリティー

セキュリティ評価認証(ISO標準15408)

・利用者の偽り防止

・コマンドのすり替え防止

・OSと独立した認証機構

・利用者の利用ログの保持

・媒体残存情報の初期化

・利用者毎の機能範囲設定

・利用者毎の使用資源の設定

・媒体属性の制御

・データの整合性チェック

・プロトコルの整合性チェック

 。。。

セキュリティ評価認証セキュリティ評価認証((ISOISO標準標準15408)15408)

・利用者の偽り防止・利用者の偽り防止

・コマンドのすり替え防止・コマンドのすり替え防止

・・OSOSと独立した認証機構と独立した認証機構

・利用者の利用ログの保持・利用者の利用ログの保持

・媒体残存情報の初期化・媒体残存情報の初期化

・利用者毎の機能範囲設定・利用者毎の機能範囲設定

・利用者毎の使用資源の設定・利用者毎の使用資源の設定

・媒体属性の制御・媒体属性の制御

・データの整合性チェック・データの整合性チェック

・プロトコルの整合性チェック・プロトコルの整合性チェック

  。。。。。。

■国際的な標準セキュリティー

 ネットワークと連携したデータベースシステムでは、多数のユーザに多様な情報を提供することができます。これに伴い、悪意を持ったユーザによる不当なデータの更新など、セキュリティ犯罪が、大きな問題となっています。

 ファイアウォールで保護された企業内ネットワークであったとしても、十分なセキュリティが必要です。このような意味において、イントラネットで動作するデータベースシステムにもセキュリティ機能が必要不可欠です。SymfowareServerは、セキュリティ評価認証(ISO標準15408)に準拠しているため、セキュリティ犯罪の脅威から、データベース

のデータを守り、さらに、承認が必要となる国際企業へのシステムの参入を可能とします。

 Symfoware Serverは、ユーザの業務開発段階から運用までのすべてのフェーズを包括的に保護する機能を提供

します。データベースに格納されたデータの状態や利用者のデータへのアクセスに対して、その正当性の確認、監査情報としてのログの取得、異常や危険が発生した場合の通知、リカバリの支援を行います。これらの機能によりシステム全体の安全を保障します。また、eCipherGate Security for Symfowareとの連携により、データベースデータや通信データを暗号化することで、さらにセキュリティを強化することができます。

Page 24: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 14

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 14

1.2.2.7 Symfoware Serverの製品構成

Symfoware Server Base Edition (Windows版限定)SymfowareSymfoware Server Base Edition Server Base Edition (Windows(Windows版限定版限定))

小規模向けデータベースエンジン

Symfoware Server Standard EditionSymfowareSymfoware Server Standard EditionServer Standard Edition

Advanced Backup ControllerAdvanced Backup ControllerAdvanced Backup Controller

コストパフォーマンスに優れた、部門業務に 適なデータベースエンジン

Symfoware Server Enterprise EditionSymfowareSymfoware Server Enterprise EditionServer Enterprise Edition

Connection ManagerConnection ManagerConnection ManagerAdvanced Backup ControllerAdvanced Backup ControllerAdvanced Backup Controller

耐故障性と拡張性に優れ、企業内のミッションクリティカルな業務に 適なデータベースエンジン

Symfoware Server Enterprise Extended EditionSymfowareSymfoware Server Enterprise Extended EditionServer Enterprise Extended Edition

Connection ManagerConnection ManagerConnection ManagerAdvanced Backup ControllerAdvanced Backup ControllerAdvanced Backup Controller

24時間365日連続運用、高いセキュリティ機能を備えたハイエンドデータベースエンジン

Symfoware Parallel Server SymfowareSymfoware Parallel Server Parallel Server データウェアハウス向け高速データベースエンジン

Symfoware Serverは、以下の製品によって構成されます。

■Symfoware Server Enterprise Extended Edition

 システムを停止することなくデータベースの変更や管理ファイルのリカバリを可能とし、24時間365日の連続運転を実現したSymfoware Serverシリーズ 高峰の製品です。秒オーダーの切替え時間をはじめとして、64ビットのメモリ空間の提供、ISO標準15408に準拠による国際的な標準セキュリティ提供などが特長です。

■Symfoware Server Enterprise Edition クラスタ構成でのホットスタンバイを搭載し、システムの故障の際、秒オーダーの切替え時間を実現します。基幹システムなどシステムの停止によるサービス中断が許されないシステムに 適な製品です。高い可用性が特長です。

■Symfoware Server Standard Edition コストパフォーマンスに優れた、部門データベースなど比較的小規模なシステムに 適な製品です。

■Symfoware Server Base Edition (Windows版限定)

 基本機能だけを必要とする小規模なシステムに 適な製品です。

■Symfoware Serverのオプション製品

 Symfoware Serverのオプション製品には以下のものがあります。

 ・Advanced Backup Controller

  ストレージ機能を利用した大規模データベースの高速バックアップ、リカバリ機能

・Connection Manager  クラスタ運用でデータベースサーバ切替時のDB接続の自動切換や接続DBサーバ分散機能

■Symfoware Serverのクライアント製品

 Symfoware Serverに対応したクライアント製品(Symfoware Clientの製品群)は、Symfoware Serverの製品に、添

付されています。

■Symfoware Parallel Server

 データウァアハウス向けのデータベースエンジンとして、データベースの並列検索および運用機能を提供する製品です。

Page 25: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 15

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 15

1.2.2.8 Symfoware Serverのサービス

設計 構築 導入 運用

データベースシステムの設計・構築・導入フェーズの技術的な質問や相談に電子メールで専門要員が的確に回答

クラスタスタートアップサービスクラスタスタートアップサービスクラスタ構成のデータベースシステムの

構成設計・セットアップ作業を短期間で実施

データベースシステムの設計を支援オンサイトで支援が可能

データベースシステムの設計に対し、問題点の洗い出しや改善案を提案

構築中、もしくは構築後のデータベースシステムに対し、性能の評価・診断を実施

早期構築 安定稼動

テクニカルデスクサービステクニカルデスクサービス

性能診断サービス性能診断サービス設計支援サービス設計支援サービス

設計診断サービス設計診断サービス

Symfoware Serverは、以下のサービスを提供し、早期構築と安定稼動を実現します。

■テクニカルデスクサービス

 データベースの設計・構築・導入フェーズにおける技術的な質問や相談に電子メールでお答えします。お客様のシステムを考慮して専門要員が高度な質問にも的確に回答いたします。

■設計支援サービス

 データベースシステムの設計を支援いたします。お客様のシステムをヒアリングし、設計方式や設計案に対し、お客様(SE)と一緒に設計の 適プランを提案いたします。ご要望に応じて専門要員がお客様の指定の場所で支援をいたします。

■設計診断サービス

 データベースシステムの設計の診断を致します。お客様が作成した設計書を診断し、問題点の指摘や改善案を提案いたします。ご要望に応じて専門要員がお客様の指定の場所で支援をいたします。

■クラスタスタートアップサービス

 クラスタ構成のデータベースシステムの構成設計・セットアップ作業を短期間で実施致します。

■性能診断サービス

 構築・導入・運用中におけるデータベースシステムの性能の評価、診断を実施し、ご報告致します。

Page 26: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 16

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 16

1.3 SQLの基本操作

データ定義文(DDL)

データ制御文(DCL)

データ操作文(DML)

 SQLの言語には以下の種類があります。

■データ定義文(DDL) 表を作成、変更または削除します。

■データ操作文(DML) データを格納、更新、削除または検索します。

 

■データ制御文(DCL)

 データ操作を確定または、取り消します。

 以降、Symfoware Serverの提供するSQL文について解説していきます。

 本書では、SymfowareのSQLの構文を、厳密には正確ではないが簡易に説明するため、以下の記号を使用して

います。

 。。。:省略記号。以降記述を省略することを示します。

 [ S ] :オプション記号。Sの記述が任意であることを示します。

 [ S1 | S2 ] :任意選択記号。記述が任意であるが、記述時はS1またはS2を選択することを示します。

       同様に [ S1 | S2 。。。| Sn] は、S1~Snのどれかを任意選択するものとします。

 { S1 | S2 } :必須選択記号。S1またはS2を選択する必要があることを示します。

       同様に { S1 | S2 。。。| Sn} は、S1~Snのどれかを必須選択するものとします。

 [ S ] 。。。:任意数回(0回以上) [ S ] を繰り返ししてよいことを示します。

Page 27: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 17

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 17

1.3.1 スキーマと表およびデータベース

スキーマ

表表 表表・・・

スキーマ

表表 表表・・・

データベース

・・・

■スキーマと表

 SQLでは、データ定義文(DDL)で定義された表の構造情報をスキーマと呼びます。Symfoware Serverでは定義

する表はスキーマに所属させます。

 スキーマには名前があり、“スキーマ名.表名”のように表の名前はスキーマ名で修飾します。表の名前はスキーマ

内で一意です。

 スキーマを特定する制御文や宣言文等により、DML文では表のスキーマ名での修飾は省略できます。DDL文で

はスキーマと表を一括して定義する場合以外はスキーマ名は省略できません。

 一般にはデータベースにスキーマが一つの場合が多くスキーマ名を省略する場合があります。本教材でもDML文では、予めスキーマ名を制御文や宣言文等で指定していることを前提として、表名に指定するスキーマ名を省略して記載します。

■データベース

 データベースは、複数のスキーマから構成される環境で、SQLでは規格上規定はありません。

 Symfoware Serverでは、データベースに名前を持ち、データベースの開発時の試験環境の作成等を目的として、

複数のデータベースを登録することも可能です。

Page 28: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 18

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 18

1.4 データの照会(検索)

検索方法(条件、関数、場合分け)

結合

データの集計と並べ替え

副問合せと問合せ指定

データの検索(SELECT)

 データの照会(検索)をするには、SELECT文を使用します。

 SELECT文による検索には、条件検索、関数の利用、場合分け等の検索方法のバリエーションがあります。また、

データの並べ替えと集計、複数の表の結合、副問合せや問合せ指定等のさまざまな操作ができます。

Page 29: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 19

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 19

1.4.1 データの検索(SELECT)

SELECTSELECT 商品名商品名, , 売単価売単価 FROMFROM 商品表商品表

商品表 実行結果実行結果

商品表から、商品名と売単価を取り出す。

売単価商品名

10,000扇風機クーラー

20,000ファンヒータ

3,000マウス

200,000パソコン

70,000洗濯機液晶テレビプラズマテレビ

100乾電池

200,000冷蔵庫

指定された列が取り出される

売単価なし:オープン価格

0K030J060C050Y050V890H050B300A9108030G04商品ID

200609210042210,000扇風機

2006092100254クーラー

20061121005651320,000ファンヒータ

20060401005200603,000マウス

200610010024082200,000パソコン

200609010032312070,000洗濯機

20061202001154液晶テレビ

20061101004210プラズマテレビ

200606080033050100乾電池

2006103100169200,000冷蔵庫入荷日倉庫ID在庫数売上数売単価商品名

*注) 金額には、例を見やすくするため、3桁毎に“,”を付与しています。

実際のデータベース中に“,”があるわけではありません。

 SELECT文を使用して、表からデータを取り出します。

【構文】

SELECT [DISTINCT] 選択リスト FROM  [スキーマ名.]表名  [ WHERE句 ] ・選択リストには、取り出す列の名前を記述します。複数の列をカンマで区切って指定することができます。

   選択リスト:検索列名[,検索列名]。。。

 ・選択リストに記述した列名の後ろに別名を指定することで、検索結果の列名を変更することができます。

   選択リスト:検索列名 [ [AS] 列別名] [,検索列名[ [AS] 列別名] ]。。。

     例:SELECT 商品名, 入荷日 AS 商品入荷日 FROM 商品表

 ・選択リストにアスタリスク’*’を指定すると、すべての列が取り出されます。

 ・WHERE句を指定することで、さまざまな条件で検索を行うことができます。

 ・DISTINCTを指定すると、選択リストの列の値が全て重複する複数のデータを一意にして取出すことができます。

  例:DISTINCT無し   DISTINCT有り

    列1, 列2     列1, 列2

    001 A   ⇒   001 A    003 B       001 B    003 A       003 A    001 B       003 B    003 B    001 B

NULL(ナル)値について

 商品表の列:「売単価」は、数値型です。しかしオープン価格で“売単価なし”場合データがありません。このようにデータが存在しない場合のデータを表すために、SQLでは“NULL”という概念を利用します。NULL値(ナル値)

は数値の0や、文字の空白とは異なりデータが存在しないことを表します。

Page 30: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 20

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 20

1.4.2 条件検索(WHERE)

商品表から、商品名が’パソコン’のデータを求める。SELECTSELECT ** FROMFROM 商品表商品表 WHEREWHERE 商品名商品名='='パソコンパソコン''

商品表

0K030J060C050Y050V890H050B300A9108030G04商品ID

200609210042210,000扇風機

2006092100254クーラー

20061121005651320,000ファンヒータ

20060401005200603,000マウス

200610010024082200,000パソコン

200609010032312070,000洗濯機

20061202001154液晶テレビ

20061101004210プラズマテレビ

200606080033050100乾電池

2006103100169200,000冷蔵庫入荷日倉庫ID在庫数売上数売単価商品名

実行結果実行結果

0V89商品ID

200610010024082200,000パソコン

入荷日倉庫ID在庫数売上個数売単価商品名

指定された条件と一致する列がすべて取り出される

 SELECT文に、検索条件を記述することで取り出すデータを絞り込むことができます。検索条件を指定するには、WHERE句を使用します。検索条件の も基本的な指定は、商品名='パソコン'のような比較の条件式です。

 商品名=‘パソコン’のような要素を述語と呼びます。(商品名= ‘パソコン’ は比較述語という要素)

 条件式では複数の条件要素(述語)を記述して、複数の条件を同時に判定できます。

【構文】

WHERE 条件式

 条件式では、さまざまな述語を使用して検索条件を設定できます。条件式が真となる行をSELECT文では取出します。

 比較述語以外の基本的なものは、以降で説明します。

 (詳しい指定方法は、“1.4.2.4 述語の種類と条件式”を参照)

Page 31: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 21

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 21

1.4.2.1 範囲検索(BETWEEN) 商品表から、在庫数が 5 以上で 20 以下のデータを求める。

SELECTSELECT ** FROMFROM 商品表商品表 WHEREWHERE 在庫数在庫数 BETWEEN 5 AND 20BETWEEN 5 AND 20

商品表

0K030J060C050Y050V890H050B300A9108030G04商品ID

200609210042210,000扇風機

2006092100254クーラー

20061121005651320,000ファンヒータ

20060401005200603,000マウス

200610010024082200,000パソコン

200609010032312070,000洗濯機

20061202001154液晶テレビ

20061101004210プラズマテレビ

200606080033050100乾電池

2006103100169200,000冷蔵庫入荷日倉庫ID在庫数売上数売単価商品名

実行結果実行結果

0J060B300G04商品ID

2006092100254クーラー

20061202001154液晶テレビ

2006103100169200,000冷蔵庫入荷日倉庫ID在庫数売上数売単価商品名

指定された条件と一致する列がすべて検索される

 SELECT文ではWHERE句に、BETWEEN述語を使用した条件式を記述することで、列がある値の範囲にあるか

を判定することができます。

【構文】

 WHERE 列名 BETWEEN a AND b  ・列名の値が、a以上、b以下のデータを検索します。

  ・列名 >= a AND 列名 <=b と同じになります。

 値が特定の範囲に含まれるかを調べるためには、比較述語も使用できます。BETWEEN述語で指定した上図を

比較述語で指定すると、以下のようになります。

 SELECT * FROM 商品表 WHERE 在庫数 >= 5 AND 在庫数 <= 20

Page 32: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 22

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 22

1.4.2.2 あいまい検索(LIKE)

01関東第ニ30055

6421

倉庫番号

03関西第二006

04北九州00402中部第一00303関西第一00201関東第一001地域コード倉庫愛称 倉庫ID

倉庫表

倉庫表の倉庫愛称から、「関東」を含む行を求める。

SELECT SELECT 倉庫ID倉庫ID, , 倉庫愛称倉庫愛称, , 地域コード地域コード

FROMFROM 倉庫表倉庫表 WHEREWHERE 倉庫愛称倉庫愛称 LIKE 'LIKE '関東関東%'%'

実行結果実行結果

01関東第ニ00501関東第一001地域コード倉庫愛称 倉庫ID

倉庫愛称が、“関東”で始まるデータが取り出される

 WHERE句に、LIKE述語を使用した条件式を記述することで、列の値がパタンに一致するかを判定することがで

きます。文字列に対して、あいまいな条件で検索することができます。任意の文字列を表すワイルドカード文字がパタンとして使用できます。

【構文】

 WHERE 列名 LIKE '文字列パタン' ・文字列パタンには、文字列データと '%' あるいは '_' を組合せて指定します。

  ・アンダースコア '_' は、任意の1文字を表します。任意のn文字は、アンダースコア '_' をn個指定します。

    例) 上図の場合、

       文字列パタンが '関西第_' あるいは '関西__' 、の場合、関西第一、関西第二が取り出されます。

  ・パーセント '%' は、任意の0個以上の文字を表します。

    例) 上図の場合、

      文字列パタンが ‘%第%’ の場合、関東第一、関西第一、中部第一、関東第二、関西第ニが取り     

      出されます。

Page 33: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 23

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 23

1.4.2.3 複数の条件指定商品表から、倉庫IDが“003”で、入荷日が“20061001”以前のデータを求める。

SELECT * FROMSELECT * FROM 商品表商品表 WHEREWHERE 倉庫ID倉庫ID='003' ='003' AND AND 入荷日入荷日 < '20061001'< '20061001'

商品表

0K030J060C050Y050V890H050B300A9108030G04商品ID

200609210042210,000扇風機

2006092100254クーラー

20061121005651320,000ファンヒータ

20060401005200603,000マウス

200610010024082200,000パソコン

200609010032312070,000洗濯機

20061202001154液晶テレビ

20061101004210プラズマテレビ

200606080033050100乾電池

2006103100169200,000冷蔵庫入荷日倉庫ID在庫数売上数売単価商品名

実行結果実行結果

二つの条件を満たすデータが取り出される。

0H050803商品ID

200609010032312070,000 洗濯機

200606080033050100 乾電池入荷日倉庫ID在庫数売上数売単価商品名

入荷日(文字列型)は数字の順に大小が決まるため、SQL文で大小比較が可能

 AND,OR,NOT演算子を使用して、WHERE句に複数の検索条件を指定することができます。

【構文】

WHERE 条件式1 AND 条件式2WHERE 条件式1 OR 条件式2WHERE NOT 条件式

 ・AND演算子は、条件式1を満たし、かつ条件式2も満たすことを判定します。

 ・OR演算子は、条件式1または条件式2のどちらか(または両方)を満たすことを判定します。

 ・NOT演算子は、条件式を満たさないことを判定します。

 ・AND,OR,NOT演算子を使用することで、複数の検索条件を組み合わせて指定することもできます。

 ・条件式に括弧が指定されている場合は括弧の中の式が 初に評価されます。括弧が指定されていない式は、  NOT、AND、ORの順で評価されます。

  (条件式の詳しい指定方法は、“1.4.2.4 述語の種類と条件式”を参照)

Page 34: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 24

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 24

1.4.2.4述語の種類と条件式

注1 EXISTS述語、限定述語は、副問合せ専用の述語。 例は、“1.4.8 副問合せと問合せ指定” を参照

限定述語

EXISTS述語

NULL述語

IN述語

BETWEEN述語

LIKE述語

比較述語

述語

 注1)行集合が存在するか否か

注1)  行集合に対する比較結果が真か虚か

NULLか否か

値の集合のどれかに一致するか否か

値で指定した範囲内にあるか否か

指定文字列パターンに一致するか否か

比較結果が真か虚か

意味  例

商品名  LIKE '健康%'

仕入価格  BETWEEN 10001 AND 20000取引先 IN (59, 63, 74)売単価 IS NULL

 在庫数量 <= 20    (“<=”:比較演算子)

条件値に等しいかどうか 注2=

条件値との大小関係の比較 注2<, <=, >, >=

条件値と不一致かどうか 注2<>

意味比較演算子

注2  “値式=NULL”や“値式<>NULL” といった比較述語はエラーとなります。 PointPoint!!

 これまでSELECT文の例を中心に記述した述語とWHERE条件式について、以下にまとめます。

■条件式

 ・条件式は、複数の述語を論理演算子(AND、OR、NOT)で結合した論理式です。

  例: 述語1 AND NOT 述語2

 ・条件式は入れ子にできます。つまり条件式自身を論理演算子で結合できます。

  例: 条件式1:述語1 AND (条件式2)    述語1:A=100    条件式2:述語2 OR 述語3 AND 述語4

    述語2:B='X'、 述語3:C IS NOT NULL、 述語4:C<=20    ⇒A =100 AND (B='X' OR C IS NOT NULL AND C<=20)■述語

 ・比較述語 :値式 比較演算子 {値式 | (副問合せ) } ・LIKE述語 :値式 [NOT] LIKE 文字列パタン [ESCAPE エスケープ文字 ] ・BETWEEN述語:値式 BETWEEN 値式 AND 値式

 ・IN述語 :値式 [NOT] IN { ( 値指定[,値指定]。。。) | (副問合せ) } ・NULL述語 :値式 IS [NOT] NULL ・EXISTS述語 :EXISTS (副問合せ)  ・限定述語 :値式 比較演算子 限定演算子 (副問合せ)■値指定

 値指定は、定数や変数等の基本の値です。

(例:'001'、3.14、TIMESTAMP '2006-12-10 09:30:52'、、 :NEWITEM)

 定数の指定方法はデータ型により異なります。詳細は“1.4.5.2 定数”を参照。変数は、:NEWITEMのように先頭にコロンを付加します。SQL文中の“:NEWITEM“は、SQLをC言語等のプログラミング言語(ホスト言語と呼びます)に埋め込み利用する場合に、ホスト言語中に定義した変数名(NEWITEM)を表します。

■値式

 基本的な要素を演算子と組みあわせた演算式です。詳細については“1.4.5.3 データ型と値式”を参照)

   値式の例: 売上数 * 100 (列“売上数”に値指定“100”を乗算した演算式)

Page 35: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 25

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 25

1.4.3 関数の利用 年末商戦に向け、入荷から当日(2006年12月10日)迄の経過日数が 60日未満であるのに在庫数が 20 未満の商品名、売上数、在庫数、入荷日を商品表から求める。

SELECT SELECT 商品名商品名, , 売上数売上数, , 在庫数在庫数, , 入荷日入荷日 FROM FROM 商品表商品表

WHEREWHERE 在庫数在庫数 < 20 < 20 ANDAND

SPAN_DATE(CNV_DATE(SPAN_DATE(CNV_DATE(入荷日入荷日, , ''YYYYMMDDYYYYMMDD''), CURRENT_DATE, ), CURRENT_DATE, ''DAYDAY'') < 60 ) < 60 商品表

0K030J060C050Y050V890H050B300A9108030G04商品ID

200609210042210,000扇風機

2006092100254クーラー

20061121005651320,000ファンヒータ

20060401005200603,000マウス

200610010024082200,000パソコン

200609010032312070,000洗濯機

20061202001154液晶テレビ

20061101004210プラズマテレビ

200606080033050100乾電池

2006103100169200,000冷蔵庫入荷日倉庫ID在庫数売上数売単価商品名

実行結果実行結果

経過日数の関数による演算結果で評価してデータが取り出される。

20061202154液晶テレビ

20061101210プラズマテレビ

2006103169冷蔵庫入荷日在庫数売上数商品名

 関数を利用して、列の内容を関数仕様に従って変換した後利用することができます。本例で利用した関数について以下に解説します。データ型については“1.4.5.1 データ型の種類”を参照。

■本例で利用の関数の形式

 ・CONV_DATE(変換元文字列値式、変換元の文字フォーマット)

  指定の形式の文字列型の値を、日付の型 (DATE) に変換します。

 ・CURRENT_DATE  本SQL実行当日を日付の型(DATE)で取り出します。

 ・SPAN_DATE(日付1、日付2、期間の単位)

  日付2 - 日付1 の値を期間(時間隔)を数値型(INTEGER)で取出します。

■利用関数の意味

  ・SPAN_DATE(入荷の日付 ,当日の日付, 'DAY')

  当日の日付-入荷日の日付の差分(日数)を数値で取出します。

 ・CNV_DATE(入荷日, 'YYYYMMDD')  ‘YYYYMMDD’ 形式の文字列型の列である入荷日を日付の型 (DATE) に変換します。

 ・CURRENT_DATE   当日(本例では2006年12月10日を仮定)の日付を日付の型 (DATE) で返す関数です。

Page 36: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 26

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 26

1.4.3.1 関数の種類

絶対値ABS()

小整数に丸め

大整数に丸め

CEIL()FLOOR()

四捨五入

切捨て

ROUND()TRUNC()

機能数値計算関数

大文字/小文字に変換UPPER()、LOWER()

文字列の反復REPLICATE()

文字列置換REPLACE()

文字列逆転REVERSE()

空白除去TRIM()

左端/右端に文字埋込みLPAD()、RPAD()

文字数(結果は数値)取得

バイト数(結果は数値)取得

CHAR_LENGTH()OCTET_LENGTH()

特定文字位置(結果は数値)POSITION()

文字列抽出SUBSTRING()

機能文字列操作関数

平均値AVG()

件数COUNT()

大値, 小値MAX()、MIN()

合計SUM()

機能グループ集計関数

日付を年、期、月へ丸めROUND_DATE()

月内 終日LAST_DATE()

現在日付

現在時間

現在時刻印

CURRENT_DATECURRENT_TIMECURRENT_TIMESTAMP

日時を文字列型に変換

文字列を日付型に変換

CNV_CHAR()CNV_DATE()

日付に期間を加算

日付の差(結果は数値)

ADD_DATE()SPAN_DATE()

日時の年~秒を数値で抽出EXTRACT()

機能日時操作関数

 関数には、以下の種類があります。

■数値計算

 数値計算を行う関数です。

■文字列操作

 ・文字列の操作をする関数です。

 ・CHAR_LENGTH,OCTET_LENGTH、POSITION、の結果は数値(真数)になります。

■日時操作

 ・日時、時間、時刻印、時間隔(期間のこと、例:2年5ヶ月、2時間30分等)の操作関数です。

 ・SPAN_DATE、EXSTRACTの結果は数値(真数)になります。

■グループ集計関数

 グループ操作で用いるグループ単位に適用する関数です。

Page 37: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 27

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 27

1.4.4 場合分け(CASE)の利用商品表から、商品名、特定倉庫(倉庫IDが“001”,“002”,“004”)の在庫状況を求める。

SELECT SELECT 商品名商品名,, CASECASE WHEN WHEN 在庫数在庫数 <=0 <=0 THEN 'THEN '在庫枯渇在庫枯渇''

WHEN WHEN 在庫数在庫数 < 5 < 5 THEN 'THEN '在庫極小在庫極小''

WHEN WHEN 在庫数在庫数 < 10 < 10 THEN 'THEN '在庫小在庫小''

WHEN WHEN 在庫数在庫数 < 30 < 30 THEN 'THEN '在庫あり在庫あり''

ELSE 'ELSE '在庫十分在庫十分''

END AS END AS 在庫状況在庫状況

FROM FROM 商品表商品表 WHERE WHERE 倉庫ID倉庫ID IN ('001', '002', '004')IN ('001', '002', '004')

商品表

0K030J060C050Y050V890H050B300A9108030G04

商品ID

200609210042210,000扇風機

2006092100254クーラー

20061121005651320,000ファンヒータ

20060401005200603,000マウス

200610010024082200,000パソコン

200609010032312070,000洗濯機

20061202001154液晶テレビ

20061101004210プラズマテレビ

200606080033050100乾電池

2006103100169200,000冷蔵庫入荷日倉庫ID在庫数売上数売単価商品名

実行結果実行結果

在庫数を在庫状況のクラスに分けて取り出す。

在庫状況商品名

在庫極小扇風機

在庫小クーラー

在庫十分パソコン

在庫あり液晶テレビ

在庫極小プラズマテレビ

在庫小冷蔵庫

 CASE式により、列の値の条件により結果を別の値に変換して取出すことができます。以下の2つの形式があります。場合分けは便利ですが、複雑な場合はSQLの実行速度に影響を与えるため注意が必要です。

【構文】

■CASE 値式 WHEN 値式 THEN {値式 | NULL} [ ELSE {値式 | NULL} ][ WHEN 値式 THEN {値式 | NULL} [ ELSE {値式 | NULL} ] ] 。。。 END

  値式の値により、結果を変更します。 ELSEを省略すると “ELSE NULL” と同じ結果となります。

  例: CASE DAYNAMEWHEN 'SUN' THEN '日' WHEN 'MON' THEN '月' WHEN 'TUE' THEN '火'WHEN 'WED' THEN '水' WHEN 'THU' THEN '木' WHEN 'FRI' THEN '金'WHEN 'SAT' THEN '土' END

■CASE WHEN 条件式 THEN {値式 | NULL} [ ELSE {値式 | NULL} ][ WHEN 条件式 THEN {値式 | NULL} [ ELSE {値式 | NULL} ] ] 。。。 END

  探索条件の結果により、結果を変更します。 ELSEを省略すると “ELSE NULL” と同じ結果となります。

  例: CASE WHEN DAYNAME = 'SUN' THEN '日' WHEN DAYNAME = 'MON' THEN '月'WHEN DAYNAME = 'TUE' THEN '火' WHEN DAYNAME = 'WED' THEN '水'WHEN DAYNAME = 'THU' THEN '木' WHEN DAYNAME = 'FRI' THEN '金'WHEN DAYNAME = 'SAT' THEN '土' END

  CASEの簡略記法として、以下の形式もあります。

■NULLIF NULLIF(V1,V2) = CASE WHEN V1 = V2 THEN NULL ELSE V1 END

  例:ペンネームが本名と異なる場合のみペンネームを取出す。

   SELECT 本名, NULLIF(ペンネーム,本名) FROM 著者

■COALESCE  COALESCE(V1,V2・・・,Vn) = CASE WHEN V1 IS NOT NULL THEN V1 ELSE COALESCE(V2・・・,Vn) END   例:内線、外線、EMAILの優先順で連絡方法を取出す。

   SELECT 従業員コード, 氏名,COALESCE(内線,外線, EMAIL) FROM 従業員マスタ

Page 38: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 28

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 28

1.4.5 SQLの共通要素

データ型の種類

定数

データ型と値式

 これまでSELECT文の基本的な指定方法の概略を記述しました。

 ここでは、SQLの中で共通的に使用するデータ型に関する種類、定数および各データ型の定数を利用した値式

(演算式)について記述します。

Page 39: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 29

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 29

1.4.5.1 データ型の種類

日、日~時、日~分、日~秒の期間を表す。

精度は、日の桁数

INTERVAL DAY(精度) [TO {HOUR | MINUTE | SECOND} ]

時間隔(日秒)

年、年~月の期間を表す、精度は年の桁数INTERVAL YEAR(精度) [TO MONTH ] 時間隔(年月)

秒の期間を表す。 精度は、秒の桁数INTERVAL SECOND (精度)時間隔(秒)

分、分~秒の期間を表す。 精度は、分の桁数INTERVAL MINUTE (精度) [TO SECOND]時間隔(分秒)

時、時~分、時~秒の期間を表す。

精度は、時の桁数

INTERVAL HOUR (精度) [TO { MINUTE | SECOND} ]

時間隔(時秒)

月の期間を表す、精度は月の桁数INTERVAL MONTH (精度) 時間隔(月)

時刻印(年~秒までのタイムスタンプ)TIMESTAMP日時(時刻印)

BLOB

日時(日、時刻)

概数

真数(10進精度)

真数(2進精度)

各国語文字列

文字列

データ型

日付、時間DATE、 TIME

バイナリ型、nにバイト数、単位はK,M,GBINARY LARGE OBJECT(n単位)

DOUBLE PRECISION、 REALFLOAT(精度)

DECIMAL(精度,位取), NUMERIC(精度,位取)INTEGER、SMALLINT

NATIONAL CHARACTER (長さ)NATIONAL CHARACTER VARYING( 大長)

CHARACTER (長さ)

CHARACTER VARYING ( 大長)

型の指定  補足

固定長:長さ分の各国語文字列を設定

可変長: 大長に 大の各国語文字数を指定

2進31桁精度, 2進15桁精度 

精度は全体桁数、位取はその内少数部の桁数

長精度(2進52桁), 単精度( 2進23桁)

FLOAT:精度により長精度または単精度

固定長:長さ分の文字列を設定

可変長: 大長に 大の文字数を指定

 表を構成する列や定数には型があり、SQLの演算はこの型に基づいて行われます。

■データ型

 ・文字列型:文字列用の型。固定長と可変長があります。 

 ・各国語文字列型:各国語(日本語)文字専用の型。固定長と可変長があります。    

 ・数値型:真数と概数があります。

 ・真数:数値を正確な数字で保持します。 数値を格納する精度として2進精度と10進精度があります。

     2進精度:長精度(2進31桁:4バイト)、単精度(2進15桁:2バイト)があります。整数のみで小数はあり    

        ません。

     10進精度:精度(全体の桁数)と位取り(全体の桁数のうちの小数点以下の桁数)を指定します。

 ・概数:数値を浮動小数点(仮数と指数による近似の数字)で保持します。

     単精度(4バイト)と長精度(8バイト)があります。一般のプログラミング言語の浮動小数点と同様です。

 ・日時型:日(年月日)、時(時分秒)、時刻印(タイムスタンプ)の種類があります。

 ・時間隔型:年~月期間、月期間、日~秒期間、分~秒期間、日期間、分期間、秒期間の種類があります。

 ・BLOB型:バイナリデータ:BLOB( 大バイト数)で、単位としてK(キロ),M(メガ),G(ギガ)を指定できます。

■CAST指定

 SQLでデータ型を異なる型に代入したり、演算するため型を変換することができます。型を相互に変換するために、以下のCAST指定と呼ばれる操作を行います。

 CAST( 変換元 AS 変換する型) 相互に変換可能な異なる型の一覧を以下に示します。BLOB型と各国語型は別の型に変換できません。

    文字列<->真数、概数

    真数<->概数

    日時<->文字列

    時間隔<->文字列

    時間隔(年月)<->時間隔(年月)

    時間隔(日時)<->時間隔(日時)  

 整数部の精度や指数部の精度が足りない場合、桁あふれエラーが発生します。

 小数部の精度が足りない場合や文字列の長さが足りない場合は、不足分は切捨てられます。

 

 

Page 40: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 30

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 30

1.4.5.2 定数

INTERVAL ''250'' DAY(3)日期間をシングルクオートで囲み記号を付加時間隔(日)

INTERVAL ''125'' MINUTE(3)分期間をシングルクオートで囲み記号を付加時間隔(分)

INTERVAL ''100:29'' MINUTE(3) TO SECOND分秒期間をシングルクオートで囲み記号を付加時間隔(分秒)

INTERVAL ''32:10:40'' HOUR TO SECOND時秒期間をシングルクオートで囲み記号を付加時間隔(時秒)

INTERVAL ''10 12:10:40'' DAY TO SECOND日秒期間をシングルクオートで囲み記号を付加時間隔(日秒)

INTERVAL ''6'' MONTH月期間をシングルクオートで囲み記号を付加時間隔(月)

INTERVAL ''1-6'' YEAR TO MONTH年月期間をシングルクオートで囲み記号を付加時間隔(年月)

INTERVAL ''4200'' SECOND(4)秒期間をシングルクオートで囲み記号を付加時間隔(秒)

TIME ''09:30:52''時刻をシングルクオートで囲み記号を付加日時(時刻)

TIMESTAMP ''2006-12-10 09:30:52''時刻印をシングルクオートで囲み記号を付加日時(時刻印)

日時(日)

概数

真数(10進精度)

真数(2進精度)

各国語文字列

文字列

データ型

DATE ''2006-12-10''日付をシングルクオートで囲み記号を付加

定数を浮動小数点形式で記述

定数を小数点付きまたは無しで記述

定数を整数で記述

定数をNとシングルクオートで囲む

定数をシングルクオートで囲む

データ型形式  定数の例

N''リレーショナルデータベース''  

100003.149.109534E-31

''Relational Database''

 条件式等に指定する定数(値指定)の指定例を以下に示します。データ型に応じて指定方法が異なります。

・文字列型・・・・・例:'Relational Database'・各国語文字列型・・例: N'リレーショナルデータベース'・数値型

・真数

   整数・・・・・例:10000   小数・・・・・例:3.14・概数(浮動小数点)・・定数を浮動小数点形式で指定します。

            例: 9.109534E-31 (9.109534×10のマイナス31乗) 

・日時型

  代表例を以下に示す。

  年、月、日間はハイファン“-”で、時間、分、秒間はコロン“:”で、日、時間の間は空白“ ”で区切ります。

  -日・・・・・・例:DATE '2006-12-10' ( 2006年12月10日)

  -時・・・・・・例:TIME '09:30:52'   ( 9時30分52秒)

  -時刻印・・・・例:TIMESTAMP '2006-12-10 09:30:52' ( 2006年12月10日 9時30分52秒)

・時間隔型

  代表例を以下に示します。この他のパタンもありますが、月と日の間は連続して指定できません。

  例えば、INTERVAL ‘12-28 10:23' MONTH TO MINUTEは月と日が連続しておりエラーとなります。

  年、月、日間はハイファン“-”で、日、時間は空白で、時間、分、秒間はコロン“:”で、区切ります。

  -年月・・・・例:INTERVAL '1-6' YEAR TO MONTH (1年と6ヶ月)

  -日秒・・・・例:INTERVAL '10 12:10:40' DAY TO SECOND (10日と12時間10分40秒)

  -分秒・・・・例:INTERVAL '100:29' MINUTE(3) TO SECOND (100分29秒)

         ( MINUTE(3):時間隔修飾子といわれるもので、分の精度が3桁あることを意味します)

・BLOB型・・ ・ ・定数は指定できません。(利用する言語のホスト変数で値を指定します)

Page 41: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 31

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 31

1.4.5.3 データ型と値式

注) 上記値式は、一部の例です。この他の演算パタンもあります。

CURRENT_TIME + INTERVAL ''100:29'' MINUTE(3) TO SECOND

時間隔演算例(100分と29秒後) 時間隔(分秒)

(CURRENT_DATE - DATE ''2005-11-10'') DAY(4)日時間の演算結果例

(本日と2005年11月10日の日数差)

時間隔

INTERVAL ''20'' YEAR - INTERVAL ''13'' MONTH 時間隔演算例(20年-13ヶ月) 時間隔(年月)

INTERVAL ''10 12:10:40'' DAY TO SECOND + INTERVAL ''35'' HOUR / 3

時間隔演算例

(10日と12時間10分40秒+35時間/3)

時間隔(日秒)

処理日時 + INTERVAL ''3'' YEAR時刻印演算例(処理日時から3年後)日時(時刻印)

CURRENT_TIME - INTERVAL ''8'' HOUR時刻の演算例(8時間前) 日時(時秒)

INTERVAL ''60'' DAY + CURRENT_DATE日付の演算例(60日後)日時(日)

''Relational '' || '' Database '' || '' Management System''文字列型の演算例(文字列結合) 文字列

N''川川'' || N''電気''日本語文字列型演算例(文字列結合) 日本語文字列

概数

真数(10進精度)

 真数(2進精度)

 数値

データ型

概数型の演算例

小数点付の数の演算例

整数の演算例

数値の前に符号を付加例

値式の例説明  値式の例

-30000  

在庫数 + 売上数

(売上数 * 100) / CAST( 売上数+在庫数 AS DECIMAL(8,2) )2.99792458E+08 * 30

 値式は、SELECT文の選択リスト、条件式の中で利用できるSQLの演算式です。

■値式

 値式は、値指定、列名、関数、CASE式、CAST指定 等の基本的な要素と演算子による演算式です。演算子は、

データ型により異なります。(上記表の値式の例を参照)

■値式の種類

 ・数値値式:[ + | - ] 数値基本要素 { + | - | * | / } 数値基本要素

    - 数値基本要素の型が異なる場合、演算前に型を合わせます。

    - 精度は変換前の型の 大値が表せる精度に変換後演算が行われます。

    - 演算結果の精度は、演算子( “+”, “- ” ,“* ” ,“/ ” )により異なります。

     例: Aが真数型(2進15桁の精度の場合) で値が10 の場合以下と等価に処理されます。

       ⇒A * 1.51 ⇒ CAST(A AS DECIMAL(5,0) ) * 1.51        ⇒演算結果の型は整数部6 (5+1),少数部2(0+2) のDECIMAL(8,2)となり結果は +000015.10  ・文字列値式: 文字基本要素 || 文字基本要素

 ・日本語文字列値式:日本語文字基本要素 || 日本語文字基本要素

 ・日時値式:時間隔基本要素 + 日時基本要素 | 日時基本要素 { + | - } 時間隔基本要素

 ・時間隔値式:時間隔基本要素 { + | - } 時間隔基本要素 | 時間隔基本要素 { * | / } 数値基本要素

         | (日時基本要素 - 日時基本要素)  時間隔修飾子 

■値式の入れ子

 値式は入れ子にできます。つまり括弧を付加して値式自身を演算子で結合できます。

  例: 値式1: 値式2 / (値式3)

         値式2: 売上数 * 100 

         値式3: 売上数 + 在庫数

         ⇒売上数 * 100 / (売上数 + 在庫数)  例: 値式1: (値式2) || ' ' || 値式3

        値式2: 'Relational' || ' ' || 'Database'        値式3: 'Management System'         ⇒ ('Relational' || ' ' || 'Database') || ' ' || 'Management System'

Page 42: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 32

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 32

1.4.6 データの集計と並べ替え

並べ替え(ORDER BY)

グループと集計(GROUP BY)

演算結果によるグループ化

取出し件数指定(LIMIT)

演算結果による並べ替え

データの集計と並べ替えには、 GROUP BY句、ORDER BY句を使用します

Page 43: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 33

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 33

1.4.6.1 グループ化と集計(GROUP BY)

商品表から、倉庫IDでグループ化した在庫数の合計を求める。

SELECTSELECT 倉庫ID倉庫ID, , SUM(SUM(在庫数在庫数)) AS AS 在庫合計在庫合計 FROM FROM 商品表商品表 GROUP BY GROUP BY 倉庫ID倉庫ID

商品表実行結果実行結果

45002

2654

53

21在庫合計

005004003

001倉庫ID

0K030J060C050Y050V890H050B300A9108030G04商品ID

200609210042210,000扇風機

2006092100254クーラー

20061121005651320,000ファンヒータ

20060401005200603,000マウス

200610010024082200,000パソコン

200609010032312070,000洗濯機

20061202001154液晶テレビ

20061101004210プラズマテレビ

200606080033050100乾電池

2006103100169200,000冷蔵庫入荷日倉庫ID在庫数売上数売単価商品名

同じ倉庫コードの在庫数の合計が取り出される

GROUP BY句を用い、指定した列で表の行をグループ化し、グループ毎に結果を集計できます。

【構文】

 SELECT [グループ化列名 [,グループ化列名] 。。。, ] グループ演算式 [,グループ演算式] 。。。

 FROM [スキーマ名.]表名 [WHERE 条件式 ]  GROUP BY グループ化列名 [,グループ化列名] 。。。 [ HAVING 条件式]

 グループ化の基準となる列名を 、GROUP BY 以降に記述します。

  ・検索する列には、GROUP BY句に指定した列と集約関数を用いたグループに対する演算式のみ

   を指定することができます。

  ・WHERE句を指定すると指定した条件式で絞り込み後の結果をグループ化します。

  ・HAVINGには、グループ化後更にグループに対する検索条件を記述します。

   例えば本例を、GROUP BY 倉庫コード HAVING SUM(在庫数)>= 10とすると、

   在庫数の合計が10未満のグループは選択されません。

 グループ演算式で用いる集約関数を下記に記載します。

■ データ件数の取得

 SELECT [グループ化列名, ] COUNT(式) FROM [スキーマ名.]表名 [ WHERE 句 ]  GROUP BY グループ化列名

 ・式が、NULL値でないグループ内の行数を求めます。 COUNTの式に’*’を指定すると、NULL値も含めた行数

  を戻します。

■ 大値、 小値の取得

 SELECT [グループ化列名, ] { MAX(式) | MIN(式) } FROM [スキーマ名.]表名 [ WHERE 句 ]  GROUP BY グループ化列名 ・グループ内の式の 大値、 小値を求めます。

■合計値、平均値の取得 SELECT [グループ化列名, ] { SUM(式) | AVG(式) } FROM [スキーマ名.]表名 [ WHERE 句 ]  GROUP BY グループ化列名

 ・グループ内の式の合計、平均を求めます。式が真数(2進精度)の場合AVG()集計関数の 終結果のデータ型  は小数点以下2桁の真数(10進精度)となります。  

Page 44: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 34

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 34

1.4.6.2 並べ替え(ORDER BY)

0K030J060C050Y050V890H050B300A9108030G04商品ID

200609210042210,000扇風機

2006092100254クーラー

20061121005651320,000ファンヒータ

20060401005200603,000マウス

200610010024082200,000パソコン

200609010032312070,000洗濯機

20061202001154液晶テレビ

20061101004210プラズマテレビ

200606080033050100乾電池

2006103100169200,000冷蔵庫入荷日倉庫ID在庫数売上数売単価商品名

SELECT SELECT 商品名商品名, , 在庫数在庫数 FROM FROM 商品表商品表 ORDER BY ORDER BY 在庫数在庫数 ASCASC

商品表 実行結果実行結果

商品表から、商品名を求め、在庫数の少ない順に並べ替える。

65ファンヒータ

23洗濯機15液晶テレビ

5クーラー2扇風機2プラズマテレビ

200

4030

6

在庫数商品名

マウス

パソコン乾電池

冷蔵庫

在庫数の昇順に並べ替えされる

 SELECT文を実行して、出力される検索結果は順不同で出力されます。表に格納されているデータには、順番がないからです。検索結果を、何らかの順番で出力したい場合は、ORDER BY句を用います。ORDER BY句で指定

した列の値を基準に、並べ替えた結果が出力されます。

【構文】

 ORDER BY 列名 [ ASC | DESC ] [, 列名 [ ASC | DESC ] ]  。。。

  ・デフォルトでは、指定した列名の値の昇順に結果を並び替えます。

  ・ASCを指定すると、指定した列名の値の昇順に結果を並び替えます。

  ・DESCを指定すると、指定した列名の値の降順に結果を並び替えます。

  ・文字列型や日本語文字列型 の列をORDER BYに指定すると、その列のバイナリ値に基づき順序が決まりま

   す。

Page 45: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 35

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 35

1.4.6.3 演算結果によるグループ化商品表から、売単価がオープン価格か1万円を超えるものを、入荷の月で

グループ化し入荷月、売上合計、在庫合計を、在庫合計の多い順に並べる。

SELECTSELECT 入荷月入荷月, , SUM(SUM(売上売上数数) ) AS AS 売上売上合計合計, , SUM(SUM(在庫数在庫数) ) AS AS 在庫合計在庫合計

FROM FROM 商品表商品表 WHERE WHERE 売単価売単価 IS NULL OR IS NULL OR 売単価売単価 > 10000> 10000

GROUP BY SUBSTRING(GROUP BY SUBSTRING(入荷日入荷日 FROM 1 FOR 6) AS FROM 1 FOR 6) AS 入荷月入荷月

ORDER BY ORDER BY 在庫合計在庫合計 DESCDESC

商品表 実行結果実行結果

在庫合計が大きい順に取り出される

41249123

売上合計

46200610

1528

67在庫合計

200612200609

200611入荷月

売単価が空白:NULL値とします。

0K030J060C050Y050V890H050B300A9108030G04商品ID

200609210042210,000扇風機

2006092100254クーラー

20061121005651320,000ファンヒータ

20060401005200603,000マウス

200610010024082200,000パソコン

200609010032312070,000洗濯機

20061202001154液晶テレビ

20061101004210プラズマテレビ

200606080033050100乾電池

2006103100169200,000冷蔵庫入荷日倉庫ID在庫数売上数売単価商品名

 GROUP BY句により演算(加工)結果でグルーピングを行うことができます。

 この演算式(値式)の結果には名前(グループ化列別名)を付け、検索する列にこの名前を指定できます。

■演算結果によるグループ化。

【構文】

 SELECT [グループ化列別名 [, グループ化列別名] 。。。, ] グループ演算式 [,グループ演算式]。。。

 FROM [スキーマ名.]表名 [WHERE 条件式 ]

 GROUP BY グループ化値式 [AS] グループ化列別名 [,グループ化値式 [AS] グループ化列別名]  ] 。。。

 [ HAVING 条件式 ]

■グループ化項目の演算式

  SUBSTRING(入荷日 FROM 1 FOR 6) AS 入荷月

【解説】

 入荷日は文字列型('YYYYMMDD'の形式))なので、この文字列の1~6文字を取出し月のデータとします。結果

に、“入荷月”という列の名前を付与します。

■グループ化列の取出

 SELECT 入荷月, 。。。。

 GROUP BY  SUBSTRING(入荷日 FROM 1 FOR 6) AS 入荷月 

【解説】

 グループ化列の演算結果を命名した列別名を指定して結果を取り出します。

【補足】

・NULL値の処理

 WHERE 売単価 IS NULL OR 売単価 > 10000

 売単価の値がNULL(ナル)の場合は、(オープン価格なので)取出しに含めます。また売単価が1万を超える商品は商品名を取出します。

Page 46: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 36

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 36

1.4.6.4 取出し件数指定(LIMIT)

0K030J060C050Y050V890H050B300A9108030G04商品ID

200609210042210,000扇風機

2006092100254クーラー

20061121005651320,000ファンヒータ

20060401005200603,000マウス

200610010024082200,000パソコン

200609010032312070,000洗濯機

20061202001154液晶テレビ

20061101004210プラズマテレビ

200606080033050100乾電池

2006103100169200,000冷蔵庫入荷日倉庫ID在庫数売上数売単価商品名

SELECT SELECT 商品名商品名, , 在庫数在庫数 FROM FROM 商品表商品表

ORDER BY ORDER BY 在庫数在庫数 ASCASC

WITH OPTION LIMIT (5)WITH OPTION LIMIT (5)商品表 実行結果実行結果

商品表から、商品名と在庫数を在庫数の少ない順に並べ先頭5行を取り出す。

15液晶テレビ

5クーラー2扇風機2プラズマテレビ

6

在庫数商品名

冷蔵庫

在庫数の昇順に先頭5件が取出される

40パソコン65ファンヒータ

23洗濯機

200

30

マウス

乾電池

 SELECT文のORDER BY句で指定した列の値を基準に、並べ替えた後、先頭のn件を取出すにはWITH

OPTION LIMIT句を用います。

【構文】

 WITH OPTION LIMIT (件数)  ・取出し件数nをLIMITに指定します。

  ・WITH OPTIONは、SQL文のロック(LOCK)や取出し件数(LIMIT)等の指定をするためのオプション句       です。したがって副問合せや問合せ指定中には指定できません。

Page 47: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 37

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 37

1.4.6.5 演算結果による並べ替え

0K030J060C050Y050V890H050B300A9108030G04商品ID

200609210042210,000扇風機

2006092100254クーラー

20061121005651320,000ファンヒータ

20060401005200603,000マウス

200610010024082200,000パソコン

200609010032312070,000洗濯機

20061202001154液晶テレビ

20061101004210プラズマテレビ

200606080033050100乾電池

2006103100169200,000冷蔵庫入荷日倉庫ID在庫数売上数売単価商品名

SELECT SELECT 商品名商品名,, CASTCAST( ( ((売上数売上数 * 100) / * 100) / CASTCAST((((売上数売上数++在庫数在庫数) ) AS DECIMALAS DECIMAL)) / /

SPAN_DATESPAN_DATE((CNV_DATE(CNV_DATE(入荷日入荷日, , ''YYYYMMDDYYYYMMDD''), CURRENT_DATE, ), CURRENT_DATE, ''DAYDAY''))*30 AS DECIMAL(4,2) *30 AS DECIMAL(4,2) ))

AS AS 月間売上率月間売上率 FROM FROM 商品表商品表 WHERE WHERE 売単価売単価 IS NULL OR IS NULL OR 売単価売単価 >= 10000 >= 10000

ORDER BY ORDER BY 月間売上率月間売上率 WITH OPTION LIMIT (5)WITH OPTION LIMIT (5)

商品表 実行結果実行結果

商品表から、商品名と月間売上率を取出し、月間売上率の低い順(昇順)に並べ替え、先頭5件を取出す。ただし、オープン価格か1万以上の単価の商品を対象とする。

25.17洗濯機18.75扇風機16.66クーラー

28.8026.31

月間売上率商品名

パソコンファンヒータ

月間売上率の昇順に先頭5件を取出す

45.00冷蔵庫

78.9464.10

液晶テレビプラズマテレビ

*売上率:売上個数/(売上数+在庫数) と仮定します。

*月間売上率:(売上率/入荷からの経過日数)のパーセンテージを30日に換算した値で代用します。

 演算を行い、この演算結果で並べ換えて行を取出すことができます。

【構文】

■型の変換による演算

【解説】

  CAST( (売上数 * 100) / CAST( (売上数+在庫数) AS DECIMAL) / SPAN_DATE(。。。) * 30 AS DECIMAL(4,2) ):(売上個数 * 100 ) / (売上個数 + 在庫数) の計算結果を小数点付き数字であるDECIMALに変換して表現します。(売上個数や在庫数の型は小数点なし数字の型(INTEGER)とします)

■SPAN_DATE(。。。)・CNV_DATE(入荷日, 'YYYYMMDD')  入荷日が 'YYYYYMMDD'の形式の文字列とみなし、結果を日付型(DATE型)に変換します。

・ CURRENT_DATE 本SQL実行当日の日付を取り出す。(当日は、2006年12月10日と仮定します)

・ SPAN_DATE(CNV_DATE(入荷日, 'YYYYMMDD'), CURRENT_DATE, 'DAY') 現在の日付と入荷日の日数(期間)を数値として取出します。

 本例のように演算により色々な処理ができます。しかし便利な反面複雑な演算はSQLの実行性能に影響を与え

るため、取出し件数が多い場合は注意が必要となります。

Page 48: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 38

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 38

1.4.7 結合

複数の表を関連づけてデータを取り出す

表の結合時に、条件を満たさない行も取り出す

表を関連づける条件を指定する

 表と表の結合について説明します。

Page 49: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 39

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 39

1.4.7.1複数の表を関連づけてデータを取り出すFROM句に、会社表と日別発注表の複数の表名を指定する。

SELECT * FROMSELECT * FROM 会社表会社表, , 日別発注表日別発注表

実行結果実行結果

会社表 日別発注表

アイデア商事62第第商事74

NT電気59アダム電気61

会社名会社番号

53,000380

63,000仕入価格

111351124

取引製品

5100

10発注数量

10:26:056113:01:5859

09:40:3374処理時間取引先

53,00053,00053,00053,000

380380380380

63,00063,00063,00063,000

仕入価格

09:40:331012474アイデア商事62

10:26:0510035161アイデア商事6210:26:0510035161第第商事7413:01:58511159NT電気5913:01:58511159アダム電気6113:01:58511159アイデア商事62

10:26:0510035161NT電気5910:26:0510035161アダム電気61

13:01:58511159第第商事74

09:40:331012474NT電気59

74

61

会社番号

第第商事

アダム電気

会社名

124

124

取引製品

10

10

発注数量

09:40:3374

09:40:3374

処理時間取引先

(計12行)

「会社表」と「日別発注表」が組み合わされる。

 ■複数の表を関連づけてデータを取り出す場合

 複数の表を関連づけてデータを取り出すには、FROM句に、表名をコンマ“,”で区切って指定します。

複数の表名を指定した場合、FROM句の結果で新たな表が導出されます。この導出された表から、データの取り出

しが行われます。

 FROM句にn個(本例では2個)の表名を指定して、WHERE句を指定しなかった場合、FROM句の結果から、導出

される表はn個の表の全ての行を組み合わせた行数(本例では:4×3=12行)となります。一般に組合せに意味のない結果が取出されます。

Page 50: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 40

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 40

1.4.7.2 表を関連づける条件を指定する

SELECT SELECT 会社番号会社番号, , 会社名会社名, , 取引先取引先, , 取引製品取引製品, , 仕入価格仕入価格, , 発注数量発注数量, , 処理時間処理時間

FROMFROM 会社表会社表, , 日別日別発注表発注表

WHERE WHERE 会社表会社表..会社番号会社番号==日別発注表日別発注表..取引先取引先

実行結果実行結果

会社表 日別発注表

53,000380

63,000仕入価格

13:01:58511159NT電気5910:26:0510035161アダム電気61

74会社番号

第第商事会社名

124取引製品

10発注数量

09:40:3374処理時間取引先

FROM句に、会社表と日別発注表を関連づける条件を指定する。

指定された条件と一致する列がすべて取り出される

アイデア商事62第第商事74

NT電気59アダム電気61

会社名会社番号

53,000380

63,000仕入価格

111351124

取引製品

5100

10発注数量

10:26:056113:01:5859

09:40:3374処理時間取引先

 前例では、WHERE句を指定しなかった場合、一般に組合せに意味のない結果が取出される例を示しました。

 表を関連づけるうえで意味のあるデータだけを絞り込むことは、大変重要です。意味のあるデータだけを絞り込むには、WHERE句に表を関連づけるための条件を指定します。

【構文】

 SELECT [DISTINCT] 選択リスト

 FROM  [スキーマ名.]表名 [, [スキーマ名.]表名] 。。。 

 WHERE [表名.]結合列名=[表名.]結合列名 [AND [表名.]結合列名=[表名.]結合列名] 。。。

  ・結合条件には、表間の関連する列の名前の条件を指定します。

  ・結合条件は、複数の条件をANDで区切って指定することができます。

Page 51: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 41

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 41

1.4.7.3 表の結合時に、条件を満たさない行も取り出す

SELECT SELECT 会社表会社表..会社名会社名, , 日別発注表日別発注表..取引製品取引製品,, 日別発注表日別発注表..発注数量発注数量

FROMFROM 会社表会社表 LEFT OUTER JOINLEFT OUTER JOIN 日別発注表日別発注表

ONON 会社表会社表..会社会社番号番号 = = 日別日別発注表発注表..取引先取引先

会社表 日別発注表

NT電気59アダム電気61アイデア商事62第第商事74

会社名会社番号

会社表と日別発注表を結合する際、結合型に LEFTを記述した場合。

53,000380

63,000仕入価格

09:40:33101247410:26:051003516113:01:58511159

取引製品 発注数量 処理時間取引先

アイデア商事10 124第第商事

アダム電気NT電気

会社名

351111

取引製品

100 5

発注数量

実行結果実行結果

結合条件に一致しなくとも、会社表のデータは取り出される

 表の結合時に、条件を満たさない行は取り出されません。条件を満たさない行も取り出す場合には、外部結合を利用します。

外部結合は、結合条件を満たさない行も、存在すればすべて取り出すことができます。

 外部結合型には以下の2つの型(結合型)があります。

■LEFT 結合条件を満たす行の組合せおよび結合条件を満たない左側の表の行すべてを取り出します。

■RIGHT 結合条件を満たす行の組合せおよび結合条件を満たない右側の表の行すべてを取り出します。

【構文】

 SELECT [DISTINCT] 選択リスト

 FROM  { [スキーマ名.]表名 | (問合せ指定) } [ [AS] 表別名 ]   {LEFT | RIGHT} [ OUTER ] JOIN

{ [スキーマ名.]表名 | (問合せ指定) } [ [AS] 表別名 ]     ON [表名.]結合列名=[表名.]結合列名 [AND [表名.]結合列名=[表名.]結合列名] 。。。

 WHERE 。。。

  ・結合条件には、表間の関連する列の名前の条件をONの後に指定します。

  ・結合条件は、複数の条件をANDで区切って指定することができます。

Page 52: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 42

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 42

1.4.8 副問合せと問合せ指定

 SQL文の中に、別のSELECT文を記述してその結果を利用することができます。

副問合せと問合せ指定があります。

[[副問合せ副問合せ]]

 SQL文中の探索条件中の以下の述語で利用できます。

 ■比較述語:副問合せの結果の1行と比較することができます。

 ■IN述語:副問合せの結果集合行に含まれるかを判定することができます。

 ■限定述語:副問合せの結果集合行に対しての以下の限定条件を指定することができます。

ALL:副問合せの結果のすべての値について、比較演算結果が真になるかの判定

ANY:副問合せの結果の値について、1つでも比較演算が真になるかの判定

SOME:ANYと同じです。 

 ■EXISTS述語:副問合せの結果が存在するかを判定することができます。

[[問合せ指定問合せ指定]]

 ■SELECT文:FROM句に検索結果を仮想の表(導出表)として指定する場合に利用できます。

 ■INSERT文:表に挿入するデータを既存の表から取出すために利用できます。

 ■SELECT文:検索結果同士のUNION集合操作。

 副問合せや問合せ指定を利用すると、SELECT文を入れ子にして、行の集合単位の操作を行うことができます。

■副問合せ

 SQL文中の探索条件中の以下の述語で利用できます。

 ・比較述語:副問合せの結果の1行と比較することができます。

 ・IN述語:副問合せの結果集合行に含まれるかを判定することができます。

 ・限定述語:副問合せの結果集合行に対して以下の限定条件を指定することができます。

  ALL:副問合せの結果のすべての値について、比較演算結果が真になるかの判定

  ANY:副問合せの結果の値について、1つでも比較演算が真になるかの判定

  SOME:ANYと同じです。 

 ・EXISTS述語:副問合せの結果が存在するかを判定することができます。

■問合せ指定

 ・SELECT文:FROM句に検索結果を仮想の表(導出表)として指定する場合に利用できます。

 ・INSERT文:表に挿入するデータを既存の表から取出すために利用できます。

 ・SELECT文:検索結果同士のUNION集合操作。

 副問合せや問合せ指定の利用での注意点は、以下です。

 ・ORDER BY句

   並べ替えを行うORDER BY句は、SELECT検索結果全体に一度のみ利用できます。副問合せや問合せ指定  では指定できません。

 ・INSERTの問合せ指定

   既存のデータ量の大きい表から別表に問合せ指定によりINSERTの行う場合は、大量の行が挿入される可能  性があるため、必ず元の表から抽出される行数が一度にINSERTしてよい件数かを十分考慮して利用する必 

  要があります。

Page 53: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 43

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 43

SELECT SELECT 会社名会社名 FROMFROM 会社表会社表

WHERE WHERE 会社番号会社番号 IN (SELECT IN (SELECT 取引先取引先 FROM FROM 発注表発注表 WHERE WHERE 取引製品取引製品 = 110)= 110)

実行結果実行結果

会社表 発注表

第第商事アイデア商事

会社名

WHERE句に、会社表と発注表を関連づける副問合せ条件を指定する。

副問合せの結果に含まれる列が取り出される

226110140124110

取引製品

11250037500

80006400

39000仕入価格

40618061

120622062

12074発注数量取引先

NT電気59アダム電気61アイデア商事62第第商事74

会社名会社番号

1.4.8.1 副問合せ(IN, EXISTS)

SELECT SELECT 会社名会社名 FROMFROM 会社表会社表

WHERE WHERE EXISTS (SELECT * FROM EXISTS (SELECT * FROM 発注表発注表 WHERE WHERE 取引製品取引製品 = 110 = 110 AND AND 会社番号会社番号==取引先取引先 ))

 INやEXISTSによる副問合せにより、2つの表の関連付けを行うことができます。 

 本副問合せは、 比較述語を用いても記述できます。

■集合関数による副問合せ

  SELECT 会社名 FROM 会社表

  WHERE (SELECT COUNT(*) FROM 発注表

WHERE 会社番号 =取引先 AND 取引製品=110) > 0

Page 54: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 44

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 44

SELECT SELECT 製品番号製品番号 FROMFROM 在庫表在庫表

WHERE WHERE 在庫数量在庫数量 <<ANY (SELECT ANY (SELECT 発注数量発注数量

FROM FROM 発注表発注表

WHERE WHERE 取引製品取引製品==在庫表在庫表..製品番号製品番号))

実行結果実行結果

在庫表

発注表

212215

111

226

110

製品番号

在庫数量が、その在庫の製品を発注しているいずれかの取引先への発注数量より少ない場合、在庫の製品番号を求める。

2080,00024061

60039035171507,800 14071

8057,4001116380037535162

10246,00021563

10003503517212039,00011074

10 84,0002437220105,00022672

707,00014072

30205,00021263

20112,5002266212037,50011062

20117,0002267412054,00011174

10210,00021572

10140,4002277470039035174

215140124123

取引製品

240,0008,0006,400

48,000仕入価格

406180611061

6061発注数量取引先

1.4.8.2 副問合せ(限定述語)

18冷蔵庫226115冷蔵庫227225CDプレーヤー240

2120CDプレーヤー14020テレビ21225ビデオ215

214CDプレーヤー243

285テレビ110

CD

冷蔵庫冷蔵庫テレビ

製品名

2500

756090

在庫数量

11231124

2351

2111

倉庫番号製品番号

 副問合せにより、行の集合との比較を行うことができます。 

■ANYまたはSOME限定述語

  SELECT 製品番号 FROM 在庫表

 WHERE 在庫数量 <ANY (SELECT 発注数量

             FROM 発注表

             WHERE 取引製品 = 在庫表.製品番号)

 上記SQLは、在庫表の各製品番号について、以下が真かを評価し、真ならその製品番号を取出します。

 ・在庫表の製品番号と同じ取引製品の発注表の行に対して

  -発注数量>在庫数量”を満たす行が1行でもあるか

   値式 <ANY (副問合せ)の形式の述語を限定述語とよびます。

■ALL限定述語

 例題が 「庫数数量が、その在庫の製品を発注しているすべての取引先ヘの発注数量より少ない場合、その製

品番号を求める」  であった場合のSQLをALL限定述語を利用した場合の使用例を以下に示します。

SELECT 製品番号 FROM 在庫表

WHERE 在庫数量 <ALL (SELECT 発注数量

FROM 発注表

WHERE 取引製品 =在庫表.製品番号) 上記SQLは、在庫表の各製品番号について、以下が真かを評価し、真ならその製品番号を取出します。

 

・在庫表の製品番号と同じ取引製品の発注表の行に対して

  -全ての行が“発注数量>在庫数量”を満たすか

    結果は、以下となります。

     製品番号

     110     212     215     226

Page 55: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 45

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 45

1.4.8.3 問合せ指定(導出表)

SELECT SELECT 会社名会社名, , 製品名製品名, , 発注額発注額, , 仕入価格仕入価格, , 在庫数量在庫数量 FROMFROM 会社表会社表, , 在庫表在庫表, , ( ( SELECT SELECT 取引先取引先, , 取引製品取引製品, , 仕入価格仕入価格, , 仕入価格仕入価格* * 発注数量発注数量 AS AS 発注額発注額

FROM FROM 発注表発注表 WHERE WHERE 仕入価格仕入価格 >= 10000 >= 10000 AND AND 仕入価格仕入価格* * 発注数量発注数量 <= 4500000 ) <= 4500000 ) AS AS 候補候補

WHERE WHERE 会社番号会社番号 = = 取引先取引先 AND AND 製品番号製品番号 = = 取引製品取引製品 AND AND 在庫数量在庫数量 <50 <50 ORDER BY ORDER BY 発注額発注額

NT電気59アダム電気61アイデア商事62第第商事74

会社名会社番号

226110140124110

取引製品

112,50037,5008,0006,400

39,000仕入価格

40618061

120622062

12074発注数量取引先

会社表

候補(導出表)

仕入価格が1万以上の製品の発注実績(仕入価格*発注数量)が450万以下の会社で在庫数量が50未満の会社名, 製品名, 発注額, 仕入価格, 在庫数量を取出す。

在庫表より導出される

冷蔵庫CDプレーヤー冷蔵庫テレビ

製品名

81207585

在庫数量

112421401226

2110倉庫番号製品番号

112,50037,50064,000

仕入価格

225,0004,500,0002,560,000発注額

226110124

取引製品616262

取引先

112,500仕入価格

冷蔵庫

製品名2,250,000発注額

8アイデア商事

在庫数量会社名

発注表

在庫表

実行結果実行結果

 導出表は、検索結果を仮想的な表のように扱うことができます。

 ■導出表

      ( SELECT 取引先, 取引製品, 仕入価格, 仕入価格* 発注数量 AS 発注額

    FROM 発注表 WHERE 仕入価格 >= 10000 AND 仕入価格* 発注数量 <= 4500000 ) AS 候補

 本導出表は、仕入単価が1万円以上の製品で、仕入価格*発注数量が450万円以下の発注をしている行の集合

を“候補”という仮想的な表(導出表)として定義し、FROM句に記述しています。

Page 56: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 46

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 46

1.4.8.4 問合せ指定(UNION)

SELECTSELECT   取引先取引先, , 取引製品取引製品, , 仕入価格仕入価格, , 発注数量発注数量 FROM FROM 日別発注表日別発注表 WHERE WHERE 取引先取引先=61 =61 UNION UNION SELECTSELECT   取引先取引先, , 取引製品取引製品,,仕入価格仕入価格, , 発注数量発注数量 FROM FROM 発注表発注表 WHERE WHERE 取引先取引先=61=61

201208040

120発注数量

226110140124110

取引製品

112,50037,5008,0006,400

39,000仕入価格

2006-11-21 17:09:10612006-11-21 17:09:10612006-11-24 13:15:32622006-12-01 11:32:1262

2006-11-25 14:23:3174処理日時取引先

日別発注表と発注表を合わせた、取引先、取引製品、発注数量を取出す。

実行結果実行結果

53,000380

63,000仕入価格

111351124

取引製品

5100

10発注数量

10:26:056113:01:5859

09:40:3374処理時間取引先

発注表日別発注表

8,0006,400

380仕入価格

40124618014061

351取引製品

100発注数量

61取引先

 問合せ指定(UNION)は、複数の表の問合せ結果を一つにする(行の集合和を求める)ことができます。

 ■問合せ指定(UNION)

   SELECT  取引先, 取引製品, 仕入価格, 発注数量 FROM 日別発注表

  UNION   SELECT  取引先, 取引製品, 仕入価格, 発注数量 FROM 発注表

 -両方の問合せ指定で行の値が重複している場合に重複したまま取出すには、UNION ALL と指定します。

   例:

  SELECT  取引先, 取引製品, 仕入価格, 発注数量 FROM 日別発注表

   UNION ALL    SELECT  取引先, 取引製品, 仕入価格, 発注数量 FROM 発注表

Page 57: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 47

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 47

1.5 データの変更

データ追加(INSERT)

データ削除(DELETE)

データ変更(UPDATE)

 表に対して、新しい行の追加、既存行の更新、削除について説明します。

Page 58: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 48

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 48

1.5.1 データ追加(INSERT)発注表に取引先が 78 、取引製品が 400 、仕入価格が 125,000、そして発注数量が 50 のデータを追加する。

INSERT INTOINSERT INTO 発注表発注表 ((取引取引先先, , 取引取引製品製品, , 仕入価格仕入価格, , 発注数量発注数量, , 処理日時処理日時) )

VALUES VALUES (78, 400, 125000, 50, CURRENT_TIMESTAMP)(78, 400, 125000, 50, CURRENT_TIMESTAMP)

507001020

1201202010804060

発注数量

2006-12-05 16:32:48390351742006-12-10 08:21:28125,00040078

2006-11-29 12:42:11117,000226742006-12-02 10:47:17140,40022774

2006-11-20 13:38:02 80,000240612006-11-25 10:37:2539,000110742006-11-30 18:32:4854,00011174

240,0008,000

64,00048,000

仕入価格

2006-11-21 14:23:31 215612006-11-21 17:09:10140612006-11-21 17:09:10124612006-11-20 11:32:5112361

処理日時取引製品取引先

発注表

1行追加

 INSERT文を使用して、表にデータを挿入します。

【構文】

 INSERT INTO [スキーマ名.]表名 [(列名 [,列名] 。。。) ] { VALUES ( データ, 。。。) | (問合せ指定) }  ・列名を指定する場合、列名の順番は任意です。

  ・値を省略した場合、NULL値が設定されます。ただし、DEFAULT句が指定されている場合は、DEFAULT句 

   の値が設定されます。

  ・VALUES句に指定可能な値は、定数、変数、順序等です。

    (関数はCURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMPのみ)

  ・すべての列に値を挿入する場合に限り、列名リストを省略できます。

  ・問合せ指定を指定する場合、問合せ指定中の表名に、INSERTの対象の表名を指定すると実行エラーとなり    ます。

■順序

 ・順序は、Symfoware Serverで一意な値を生成する機能です。18桁の真数が生成されます。

 ・順序で生成される値は、一意な値を生成しますが、連続した値を作成するわけではありません。

 ・次の順序の値を“順序名.NEXTVAL” 現在の順序の値“順序名.CURRVAL”で参照できます。

 ・順序はCREATE SEQUENCE文で予め定義しておきます。

Page 59: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 49

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 49

1202060804060

発注数量

2006-11-20 13:38:02 80,000240612006-11-30 15:26:3937,50011062

240,0008,000

64,00048,000

仕入価格

2006-12-10 17:51:24 215612006-11-21 17:09:10140612006-11-21 17:09:10124612006-11-20 11:32:5112361

処理日時取引製品取引先

1.5.2 データ変更(UPDATE)発注表の取引先が 61 で、かつ取引製品が 215 のデータについて、発注数量を 50 追加する。

UPDATE UPDATE 発注表発注表 SET SET 発注数量発注数量 ==発注数量発注数量+50, +50, 処理日時処理日時==CURRENT_TIMESTAMPCURRENT_TIMESTAMPWHERE WHERE 取引先取引先 = 61 = 61 AND AND 取引製品取引製品 = 215= 215

実行結果実行結果

1202010804060

発注数量

2006-11-20 13:38:02 80,000240612006-11-30 15:26:3937,50011062

240,0008,000

64,00048,000

仕入価格

2006-11-21 14:23:31 215612006-11-21 17:09:10140612006-11-21 17:09:10124612006-11-20 11:32:5112361

処理日時取引製品取引先発注表

 UPDATE文を使用して、表のデータを更新します。

【構文】

 UPDATE  [スキーマ名.]表名 SET 列名=データ [, 列名=データ] 。。。

[WHERE 検索条件 ]

  ・データには、値式を指定できます。

  ・WHERE句を指定しない場合、すべての行が更新されます。(注意が必要となります)

  ・WHERE句を指定した場合、検索条件を満たす行の指定した列の内容が更新されます。

  ・WHERE句 に副問合せや問合せ指定を指定する場合、それらの表名に、UPDATEの対象の表名を指定す 

   ると実行エラーとなります。

Page 60: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 50

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 50

12020

804060

発注数量

2006-11-20 13:38:02 80,000240612006-11-30 15:26:3937,50011062

8,00064,00048,000

仕入価格

2006-11-21 17:09:10140612006-11-21 17:09:10124612006-11-20 11:32:5112361

処理時間取引製品取引先

1.5.3 データ削除(DELETE)

発注表の取引先が 61 で、かつ取引製品が 215 の行を削除する。

DELETE FROM DELETE FROM 発注表発注表 WHERE WHERE 取引先取引先 = 61 = 61 AND AND 取引製品取引製品 = 215= 215

実行結果実行結果

発注表

削除された行削除された行

1202050804060

発注数量

2006-11-20 13:38:02 80,000240612006-11-30 15:26:3937,50011062

240,0008,000

64,00048,000

仕入価格

2006-12-10 17:51:24 215612006-11-21 17:09:10140612006-11-21 17:09:10124612006-11-20 11:32:5112361

処理日時取引製品取引先

 DELETE文を使用して、表のデータを削除します。

【構文】

 DELETE FROM [スキーマ名.]表名

[WHERE 検索条件 ]

   ・WHERE句を指定しない場合すべての行が削除されます。 (注意が必要となります)

   ・WHERE句を指定する場合、検索条件を満たす行が削除されます。

   ・WHERE句 に副問合せや問合せ指定を指定する場合、それらの表名に、DELETEの対象の表名を指定す 

   ると実行エラーとなります。

Page 61: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 51

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 51

1.6 トランザクションの管理

トランザクション確定(COMMIT)

トランザクション取り消し(ROLLBACK)

 データの整合性(データに矛盾がないこと)を保つために、データベースにはトランザクションという概念があります。

 トランザクションとは、データベースに対する複数の処理を、1つにまとめたものです。トランザクションは処理の小の単位となります。トランザクション内で行われる処理は、「すべて完了している」か、「何も行われていない」かのどちらかであることが保証されます。トランザクションは、データ操作文(DML)を実行することで開始され、COMMIT文または、ROLLBACK文を実行することで終了します。

Page 62: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 52

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 52

1.6.1 トランザクション確定(COMMIT)

表「TBL01」のデータを更新し、結果を確定する。(データベースに保存する)

確定確定 表「TBL01」

表「TBL01」

UPDATE TBL01 SET COL1=200UPDATE TBL01 SET COL1=200      WHERE COL2=200WHERE COL2=200

COL2COL1

500250300150200100

COL2COL1

500250300150200200

COL2COL1

500250300150200200

COMMIT COMMIT

 COMMIT文を使用して、トランザクションを終了し、トランザクション中の更新操作を確定します。

 一度COMMITにより確定した結果は、更新の差分データ(ログ)をデータベース中に保存しているため、たとえCOMMIT発行時点でまだ表に更新結果が書き出されておらず、以降アプリケーションの異常終了やサーバのダウンが発生しても確定した結果が保証されます。つまり実際にCOMMIT時に書き出された結果と等価となります。

【構文】

 COMMIT [WORK]

 データベースに対する更新操作は、トランザクションが確定するまではいつでも取り消すことができます。逆に確定すると取り消すことはできなくなります。

 更新結果を確定するには、SQLのCOMMIT文を実行します。

Page 63: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 53

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 53

1.6.2 トランザクション取り消し(ROLLBACK)表「TBL01」のデータを更新し、その後変更を無効化する。

無効化

表「TBL01」

表「TBL01」

COL2COL1

500250300150200100

ROLLBACKROLLBACK

UPDATE TBL01 SET COL1=200UPDATE TBL01 SET COL1=200      WHERE COL2=200WHERE COL2=200

COL2COL1

500250300150200200

COL2COL1

500250300150200100

 ROLLBACK文を使用して、トランザクション中の更新操作をすべて取り消します。データベースのデータはトランザクション開始前の状態に戻ります。

 ROLLBACK時点で、既に表に更新結果が書き込まれていても、更新する前の差分データ(ログ)をデータベース中に保存しているため、以降アプリケーションの異常終了やサーバのダウンが発生しても更新前のデータでトランザクションの結果を取り消します。つまり実際にROLLBACK時に表を更新前に戻した結果と等価となります。

【構文】

 ROLLBACK [WORK]

 トランザクションを開始したあと、データベースに対する更新操作を途中まで実行してから、何らかの理由でそれまでの更新操作を取り消したい場合があります。まだ確定していない更新操作は、取り消すことができます。更新結果を取り消すためには、SQLのROLLBACK文を実行します。

  ROLLBACK文は、現在のトランザクションの更新操作を取り消すものであり、既にCOMMITを発行して確定済の、

以前のトランザクションの結果を取り消すことはできません。

Page 64: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 54

MEMO

Page 65: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 55

第2章Symfoware 基本

データベースの基礎

Symfowareデータベースの基礎について記述します。

Page 66: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 56

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 56

2.1 DBMSの役割

利用者1利用者2

利用者3

データベース管理システム

(エンジン)

データベース(積載物)

ストアドプロシジャ

ビュー表実表

インデックスRDBディクショナリ

RDBディレクトリファイル

システム資源(車体)

テンポラリログファイル

複数のアクセスを制御しデータの整合性を確保

コンピュータリソースを活用した高速なデータ処理

不慮の障害に備えたデータの保護

データベース管理システムが行なうタスク

 データベース管理システム(DBMS)は、データベースへのアクセスを管理する基本ソフトウェアであり、一般的に

はサーバの起動と同時に起動されることによってメモリ上に常駐して次のようなタスクを実行します。

■複数の利用者の間で共有されるデータベースへのアクセス(これをトランザクションと呼びます)を制御し、 データに矛盾が発生しないようにします。

■多数のデータベース利用者が、 大限の生産性を達成できるようにメモリなどのコンピュータリソースを効率的に活用します。

■万が一ハードウェアに障害が発生しても、データベースに対して実行された作業が失われないように、データベースを保護します。

Page 67: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 57

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 57

2.2 表の定義と関連定義

表の定義

ストアドプロシジャ

制約とデフォルト定義

ビュー

表の構成

スキーマの作成

トリガ

インデックス

 表におよび関連物の定義ついて、解説します。

Page 68: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 58

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 58

2.2.1 表の構成

販売表販売表

表には、表名が定義されます

列には「列名」が定義されます

189730291302

製品番号

318

72

個数

5,400,000東京5/17600,000シドニー6/1

630,000ロンドン5/15

300,000ニューヨーク5/10売上金額販売店販売日

販売に関するデータ

表表

列列

行行

 Symfoware Serverは、「行」と「列」の2次元で構成される「表」形式でデータを管理し、データの参照・格納・更新・

削除をサポートします。

■表の構成と操作

 ・データは、「行」と「列」の2次元の表形式で構成されます。

 ・複数の「表」をデータで関連付けることができます。

 ・列を指定または、条件に合致する行のデータを抽出することができます。

 ・複数の行のデータを集計した結果を取り出すことができます。集計により、データの合計値、平均値、 大値、    小値、および行数を求めることができます。

 ・抽出したデータを列や列の演算結果で並べ替えて取り出すことができます。

Page 69: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 59

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 59

データベースデータベースデータベース

2.2.2 スキーマの作成在庫管理のためのスキーマのST作成

CREATE SCHEMA ST

STSTST

 スキーマの作成には、CREATE SCHEMA文を使用します。

【構文】

CREATE SCHEMA スキーマ名 

■スキーマ名を定義

 表の作成前に、スキーマ名を指定して、データベースにスキーマを作成します。

 スキーマはデータベースに複数作成することも可能です。

 “1.3.1 スキーマと表およびデータベース“を参照

Page 70: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 60

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 60

2.2.3 表の定義会社表の作成

CREATE TABLE ST.会社表(会社番号 SMALLINT NOT NULL,会社名 CHAR(40) NOT NULL,電話番号 CHAR(14),住所 CHAR(80),PRIMARY KEY (会社番号))

データ型

列名

列の制約

表の制約

CHAR(40)会社名

CHAR(80)CHAR(14)SMALLINT住所電話番号会社番号

スキーマ名

会社表会社表

STST

 表の定義には、CREATE TABLE文を使用します。

【構文】

 CREATE TABLE [スキーマ名.]表名 ( 

    列名 データ型 [デフォルト指定] [列の制約] 。。。

    [, 列名 データ型 [デフォルト指定] [列の制約] 。。。] 。。。

    [, 表の制約] 。。。

 )

 スキーマと表を一度に定義する場合は、スキーマ名を省略することもできます。

 (既にスキーマが定義されている場合は省略できません)

  表のスキーマ名省略例:

   CREATE SCHEMA STOCK

   CREATE TABLE 会社表 。。。

   CREATE TABLE 在庫表 。。。

■表と列には名前を定義

 表には表名、列には列名を定義します。

■列にはデータ型を定義

 列には、データ型を定義します。データ型は、文字列型や数値型のことです。

 データ型については「1.4.5.1 データ型の種類」を参照

■列にはデフォルト指定を定義できる

 列には、値の省略値を指定できます。INSERT文で値を指定しなかった場合、本値が挿入されます。

■表と列には制約を定義できる

 制約とは、データの整合性が保てない状態とならないようにするための保護手段です。

 ※制約については、「2.2.4 制約とデフォルト指定」で説明します。

Page 71: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 61

 ■一時表

 本例では省略していますが、 “CREATE GLOBAL TEMPORARY TABLE文”により、応用プログラムの利用者に

対して、専用に作成される一時目的の表を定義することも可能です。

 一時表には、以下の特徴があります。

 ・Symfowareと結合している間だけデータが保持され、結合が終了すると自動的にデータを消去できる。

 ・トランザクションの終了時に、自動的にデータを消去することも可能。

Page 72: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 62

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 62

2.2.4 制約とデフォルト指定

一意性制約( UNIQUE )

NOT NULL制約

デフォルト指定

一意性制約( PRIMARY KEY )

 制約を定義することで、表に格納するデータを制限します。

 制約には、以下があります。

 ■NOT NULL制約

 ■一意性制約( PRIMARY KEY ) ■一意性制約( UNIQUE )

 制限ではありませんが、ここでは制約の関連として分類します。

 ■デフォルト指定

Page 73: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 63

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 63

2.2.4.1 NOT NULL 制約会社表を作成し、会社番号と会社名にNOT NULL制約を定義する

CREATE TABLE ST.会社表( 会社番号  SMALLINT NOT NULL, 会社名  CHAR(40) NOT NULL, 電話番号  CHAR(14), 住所 CHAR(80) )

※会社名列には、NOT NULL制約が定義されているため、

  ナル値を格納できない。

愛知県。。。052-444-444450

データ

NOT NULL制約の定義

CHAR(40)会社名

CHAR(80)CHAR(14)SMALLINT住所電話番号会社番号

NOT NULL 092-333-33330492-22-222203-0000-0000電話番号

埼玉県。。。C電器30福岡県。。。D工業40

東京都。。。A商事10住所会社名会社番号

INSERT

 指定された列に、必ず値が設定されていなければならない場合、その列に、NOT NULL制約を定義します。

 NOT NULL制約が定義された列に、NULL値を格納すると、エラーになります。

【構文】 

 TABLEの作成

 CREATE TABLE [スキーマ名.]表名 (    列名 データ型 NOT NULL

   。。。

 )

Page 74: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 64

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 64

2.2.4.2 一意性制約 (PRIMARY KEY)会社表を作成し、会社番号にPRIMARY KEY制約を定義する

CREATE TABLE ST.会社表( 会社番号  SMALLINT NOT NULL  PRIMARY KEY, 会社名  CHAR(40) NOT NULL, 電話番号  CHAR(14) NOT NULL, 住所 CHAR(80) )

※会社番号列は、PRIMARY KEY制約が定義されているため、 既に存在する値“10”と同じ値のデータ

を格納することができない。

PRIMARY KEY制約の定義

E建設 愛知県。。。052-444-444410データ

CHAR(40)会社名

CHAR(80)CHAR(14)SMALLINT住所電話番号会社番号

NOT NULL 092-333-33330492-22-222203-456-0000電話番号

埼玉県。。。C電器30福岡県。。。D工業40

東京都。。。A商事10住所会社名会社番号

PRIMARY KEY

INSERT

PRIMARY KEYを指定した列は、必ず値が設定され、かつ重複したキー値が格納されないことが保証されます。

【構文】 

列に対して定義する場合

CREATE TABLE [スキーマ名.]表名 (   列名 データ型 NOT NULL PRIMARY KEY    。。。

 )

表に対して定義する場合

CREATE TABLE [スキーマ名.]表名 (    列名 データ型 NOT NULL

    。。。

   PRIMARY KEY ( 列名[ , 列名] 。。。))

■NOT NULL制約が必要

 PRIMARY KEYを指定する列には、NOT NULL制約を指定する必要があります。

■指定は一度のみ

 PRIMARY KEYは、CREATE TABLE文中で一度しか指定できません。

■インデックスの作成が必要

PRIMARY KEYを指定した列をキーとした、インデックスを作成する必要があります。

※インデックスの作成方法は、「2.2.8 インデックス」 で説明します。

※表の格納構造によってはPRIMARY KEYを指定した列に対してインデックス作成が不要な場合もあります。

Page 75: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 65

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 65

2.2.4.3 一意性制約 (UNIQUE)会社表を作成し、電話番号にUNIQUE制約を定義する

CREATE TABLE ST.会社表( 会社番号  SMALLINT NOT NULL  PRIMARY KEY, 会社名  CHAR(40) NOT NULL, 電話番号  CHAR(14) NOT NULL  UNIQUE, 住所   CHAR(80))

※電話番号列は、UNIQUE制約が定義されているため、 既に存在する値“03-1111-1111”と同じ値

のデータを格納することはできない。

UNIQUE制約の定義

東京都。。。03-1111-1111B電気15

データ

CHAR(40)会社名

CHAR(80)CHAR(14)SMALLINT住所電話番号会社番号

NOT NULL 092-333-33330492-22-222203-1111-1111電話番号

埼玉県。。。C電器30福岡県。。。D工業40

東京都。。。A商事10住所会社名会社番号

UNIQUE

INSERT

PRIMARY KEY

UNIQUEを指定した列は、必ず値が設定され、かつ重複したデータが格納されないことが保証されます。

【構文】 

テーブル作成、列に対して定義

CRAETE TABLE [スキーマ名.]表名 (    列名 データ型 NOT NULL UNIQUE,   [列名 データ型 NOT NULL UNIQUE,]

    。。。

)列の組に対して定義する場合

CRAETE TABLE [スキーマ名.]表名 (    列名 データ型 NOT NULL,

    。。。

   UNIQUE ( 列名 [, 列名] 。。。)   [UNIQUE ( 列名 [, 列名] 。。。)

)

■NOT NULL制約が必須

 UNIQUE制約を指定する列には、NOT NULL制約を指定する必要があります。

■インデックスの作成が必要

 UNIQUE制約を指定した列をキーとした、インデックスを作成する必要があります。

 ※インデックスの作成方法は、「2.2.8 インデックス」 で説明します。

 ※表の格納構造によってはUNIQUEを指定した列の代表の1組に対してはインデックス作成が不要な場合   

   もあります。

■指定は何度も可能

  UNIQUE は、CREATE TABLE文中で何度も指定できます。

Page 76: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 66

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 66

2.2.4.4 デフォルト指定会社表を作成し、住所にDEFAULT句を定義する

CREATE TABLE ST.会社表( 会社番号  SMALLINT NOT NULL, 会社名 CHAR(40) NOT NULL, 電話番号  CHAR(14), 住所 CHAR(80) DEFAULT  ‘未登録’

)

DEFAULT句の定義

※住所列の値が、省略された場合は、DEFAULT句

で指定された値“未登録”が代入される。

E建設 06-0000-111150データ

CHAR(40)会社名

CHAR(80)CHAR(14)SMALLINT住所電話番号会社番号

NOT NULL 福岡県。。。092-333-3333D工業4006-0000-1111

0492-22-222203-0000-0000電話番号

埼玉県。。。C電器30

未登録E建設50

東京都。。。A商事10住所会社名会社番号

DEFAULT“未登録"

INSERT

デフォルトを指定した列のデータが省略された場合、デフォルト値をデータに挿入します。

【構文】 

テーブル作成

CREATE TABLE [スキーマ名.]表名 ( 列名 データ型 DEFAULT デフォルトの値

。。。 

)

Page 77: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 67

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 67

2.2.5 ビュー

■ビューとは

  表から抽出される仮想的な表です。

■ビューを使用するメリット

・ 複雑なSELECT文の記述を簡略化できる

・ 一部の列を隠蔽することができる

■ビューとは■ビューとは

   表から抽出される仮想的な表です。表から抽出される仮想的な表です。

■ビューを使用するメリット■ビューを使用するメリット

・・ 複雑な複雑なSELECTSELECT文の記述を簡略化できる文の記述を簡略化できる

・・ 一部の一部の列を列を隠蔽することができる隠蔽することができる

PointPoint

PointPoint

 データベースのデータを検索する場合には、多くの条件を組み合わせたり複数の表を結合して検索する場合があります。すると、SELECT文が長く複雑になってしまいます。このような場合に、共通的な条件や結合の指定をビューに記述しておき、SQL文には追加の条件のみを記述することによってSQL文の記述を簡略化できます。

 また、セキュリティの観点から、表の一部の列を隠蔽したいが、その一部の列以外の列は、公開したいという場合があります。このような場合、ビューを使用すると、目的にあった検索をすることができます。

 ビュー表はデータ操作のための仮想的な表であり、データの実体は存在しません。ビュー表を作成しておいても、データ検索速度は速くなりません。

■ビュー表使用上の留意点

 ビュー表は簡易的な利用ができ便利な反面、下記の注意も必要です。

 ・ ビュー表としての実体(スペース)をもちません。SQLの実行毎に動的にビュー表が元の表より導出されます。

  このためビューを表から取出す処理時間がビュー表に対するSQL文での操作毎に必要になります。

 ・ ビュー表に対してインデックスは作成できません。

 ・実表からのデータ抽出SQL文に、以下の条件で作成されたビューは、ビュー表からデータの更新はできません。

   -GROUP BY句を使用している。

   -DISTINCTを使用している。

   -合計または、平均値を算出する関数を使用している。

   -複数表を関連付ける条件を指定している。

Page 78: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 68

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 68

2.2.5.1 ビューの定義

0B300C050H05商品ID

312

7個数

200,000東京20060916600,000シドニー20061201

400,000ロンドン20061209売上金額販売店販売日

1273

個数

東京ロンドンシドニー販売店

200,000400,000600,000

売上金額

20,00070,000

売単価

ファンヒータ洗濯機液晶テレビ商品名

0C050H050B30商品ID

18.02006091616.020061201

20061209平均値引率販売日

複数の表を関連づけたビュー表の例

販売表と商品表を結合して売上表というビュー表を作る販売表と商品表を結合して売上表というビュー表を作る

販売表(実表)販売表(実表) 商品表(実表)商品表(実表)

売上表(ビュー表)売上表(ビュー表)

0K030J060C050Y050V890H050B300A9108030G04商品ID

200609210042210,000扇風機

2006092100254クーラー

20061121005651320,000ファンヒータ

20060401005200603,000マウス

200610010024082200,000パソコン

200609010032312070,000洗濯機

20061202001154液晶テレビ

20061101004210プラズマテレビ

200606080033050100乾電池

2006103100169200,000冷蔵庫

入荷日倉庫ID在庫数売上数売単価商品名

 ビューを作成するには、SQL文のCREATE VIEW文を使用します。

上記のビュー表を作成するには、以下のビュー定義を行います。

 CREATE VIEW STINF.売上表 ASSELECT 販売日, 販売店, SALES.商品ID, 商品名, 売単価, 個数, 売上金額,

CAST( ( (売単価 * 個数) - 売上金額 )*100 / (売単価 * 個数) AS DECIMAL(3,1)) 平均値引率

FROM STINF.販売表 SALES, STINF.商品表 ITEM WHERE SALES.商品ID= ITEM.商品ID

【構文】

CREATE VIEW [スキーマ名.]ビュー表名  [ (ビュー列名[ ,ビュー列名 ] 。。。) ]  AS SELECT 列名[ , 列名 ] 。。。

FROM [スキーマ名.]表名 [, [スキーマ名.]表名] 。。。

[WHERE 条件]

 ・ビュー列名は、ビュー表に新しい列名を付ける場合に指定します。

 ・SELECT以降を問合せ指定と呼びます。

   問合せ指定は、実表のどの部分をビューとするかを指定します。

   問合せ指定については、“1.4.8 副問合せと問合せ指定”を参照

Page 79: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 69

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 69

データベースサーバデータベースサーバデータベースサーバ

2.2.6 ストアドプロシジャ指定倉庫の在庫数が10未満の製品リスト取得

CREATE PROCEDURE   ST.PLST(IN  WHNO SMALLINT,        OUT RCD INT)BEGIN DECLARE CURSOR C1 FOR  SELECT 製品名 FROM ST.在庫表  WHERE 倉庫番号=WHNO    AND 在庫数量 < 10; DECLARE PNAME CHAR(20);

OPEN C1;SET RCD = -1;

 WHILE RCD < 0;   FETCH C1 INTO PNAME;   。。。。   INSERT INTO ST.製品リスト      VALUES(PNAME);   。。。 END WHILE

CLOSE C1;END

CREATECREATE  PROCEDUREPROCEDURE      ST.PLSTST.PLST((ININ   WHNOWHNO  SMALLINT,SMALLINT,               OUT RCD INT)OUT RCD INT)BEGINBEGIN  DECLAREDECLARE  CURSORCURSOR  C1C1  FORFOR    SELECT 製品名 FROM ST.在庫表  WHERE 倉庫番号=WHNO    AND 在庫数量 < 10;  DECLARE PNAME CHAR(20);DECLARE PNAME CHAR(20);OPEN C1;SET RCD = SET RCD = --1;1;

  WHILE RCD < 0;WHILE RCD < 0;   FETCH C1 INTO PNAME;   。。。。   INSERT INTO ST.製品リスト      VALUES(PNAME);   。。。  ENDEND  WHILEWHILECLOSE C1;

ENDEND

データベース

クライアント 

クライアントクライアント  

プログラムlong RCD。。。CALL PLST(2,:RCD)。。。

プログラムプログラムlong RCDlong RCD。。。。。。CALL PLST(2,CALL PLST(2,::RCD)RCD)。。。。。。

RDB

ディクショナリ

プロシジャルーチンの登録

プロシジャルーチンの登録

プログラムlong RCD。。。CALL PLST(1,:RCD)。。。

プログラムプログラムlong RCDlong RCD。。。。。。CALL PLST(1,CALL PLST(1,::RCD)RCD)。。。。。。

 ストアドプロシジャを利用すると、予めSQLの処理手続き(プロシジャルーチン)を登録しておき、クライアントプログラムから呼び出すのみでデータベースサーバ側でSQLを実行できます。プロシジャを共通処理として複数のプログ

ラムで共用できます。

 本例では、製品表”から入力に渡した倉庫コードの製品で在庫数が10未満の製品の製品名を、別の“製品リスト”表に取出す(INSERT)処理をクライアントのCプログラムより呼び出しています。

 ストアドプロシジャは以下の手順で利用します。

■ストアドプロシジャの登録(プロシジャをRDBディクショナリに定義します。 RDBディクショナリについては

  ”2.7.1.2 データベースファイル” 参照)

■クライアントからの呼出し(パラメタを渡すことが可能)

■ストアドプロシジャの実行

■結果の通知(結果を変数に返すことが可能)

 【例説明】     CREATE PROCEDURE:ストアドプロシジャ定義  ST.PLST :スキーマ名.ストアドプロシジャ名  IN WHNO SMALLINT: 入力変数  OUT RCD INT:出力変数  BEGIN:プロシジャ開始記号  DECLARE CURSOR C1 FOR  SELECT 製品名 FROM ST.製品表    WHERE 倉庫番号=WHNO      AND 在庫数量 < 10 :SQLのカーソル定義  DECLARE CNAME CHAR(20) : プロシジャ変数定義  OPEN C1: カーソルのオープン

 SET RCD = -1: 変数の設定文  WHILE RCD < 0: 繰り返し構文、開始と実行条件     FETCH C1 INTO CNAME:カーソルから1行取出し     INSERT INTO ST.製品リスト        VALUES(CNAME) :データ挿入  END WHILE:繰り返し構文 終了  CLOSE C1: カーソルのクローズ  END: プロシジャ終了

Page 80: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 70

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 70

データベースサーバデータベースサーバデータベースサーバ

2.2.7 トリガ発注表に追加された行の発注価格が500万を超えている場合、同時に、その製品の取引先、仕入価格および発注数量を高額発注表に追加します。

CREATE TRIGGER ST.発注トリガ  AFTER INSERT ON ST.発注表  REFERENCING NEW AS NEWREC   FOR EACH ROW     WHEN (NEWREC.仕入価格 * NEWREC.発注数量 > 5000000)     INSERT INTO ST.高額発注表      VALUES(NEWREC.取引先, NEWREC.取引製品, NEWREC.仕入価格,            NEWREC.発注数量, CURRENT_TIMESTAMP)

CREATECREATE  TRIGGER ST.TRIGGER ST.発注トリガ発注トリガ    AFTER INSERT ON ST.AFTER INSERT ON ST.発注表発注表    REFERENCING NEW AS NEWREC REFERENCING NEW AS NEWREC     FOR EACH ROW FOR EACH ROW         WHEN (NEWREC.WHEN (NEWREC.仕入価格仕入価格 * * NEWREC.NEWREC.発注数量発注数量 > 5000000) > 5000000)         INSERT INTO ST.INSERT INTO ST.高額発注表高額発注表            VALUES(NEWREC.VALUES(NEWREC.取引先取引先, , NEWREC.NEWREC.取引製品取引製品, , NEWREC.NEWREC.仕入価格仕入価格,,                       NEWREC.NEWREC.発注発注数量数量, , CURRENT_TIMESTAMP)CURRENT_TIMESTAMP)

データベース

RDB

ディクショナリ

トリガの定義トリガの定義

INSET INTO 発注表 VALUES(61, 226,7000,30000,

CURRENT_TIMESTAMP)

INSET INTO 発注表 VALUES(61, 226,7000,30000,

CURRENT_TIMESTAMP)

トリガの発生

トリガのトリガの発生発生

 トリガを利用すると、ある表に更新(INSERTまたはUPDATE)が発生したとき、INSERTまたはUPDATE対象行の更新前の行の値あるいは、更新後の行の値を引数として別のINSERT文またはストアドプロシジャの実行ができま

す。

 本例では、仕入価格×発注数量が500万を超えるデータが発注表にINSERTされた場合に、その同じデータを、

高額発注表にも

INSERTする例です。

 トリガは以下の手順で利用します。

■トリガの定義

 トリガをRDBディクショナリに定義します。 RDBディクショナリについては”2.7.1.2 データベースファイル” 参照

■トリガは、データベースのデータの更新に伴って自動的に動作します。

 トリガの1例を以下に解説します。

【例説明】

 CREATE TRIGGER ST.発注トリガ   AFTER INSERT ON ST.発注表   REFERENCING NEW AS NEWREC    FOR EACH ROW      WHEN (NEWREC.仕入価格 * NEWREC.発注数量 > 5000000)      INSERT INTO ST.高額発注表       VALUES(NEWREC.取引先, NEWREC.取引製品, NEWREC.仕入価格,           NEWREC.発注数量.CURRENT_TIMESTAMP)

 このトリガ定義は、以下の意味となります。 ・ AFTER INSERT ON ST.発注表:発注表にINSERTが発生した時、INSERT後に、 ・ FOR EACH ROW:INSERTされた新規の行全てに対して、 ・ NEWREC.仕入価格 * NEWREC.発注数量 > 5000000:新規の行の仕入価格×発注数量>500万なら、                  (新規の行の仕入価格×発注数量=7000×30000⇒2100万) ・ INSERT INTO ST.高額発注表 :高額発注表に、新規の行の ・ WHEN NEWREC.取引先, NEWREC.取引製品, NEWREC.仕入価格,NEWREC.発注数量, CURRENT_TIMESTAMP:

取引先、取引製品、仕入価格、発注数量、処理日時をINSERT

Page 81: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 71

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 71

2.2.8 インデックス

■インデックスとは

  データベースのデータ検索の効率を高めるためのものです。ただし、PRIMARY KEYやUNIQUEを指定する場合にデータの一意性を保障する手段として指定する場合もあります。

■インデックスの特徴

・インデックスは、データベースに格納されているデータを効率よく検索するために使用します。

・インデックスの設計および利用は、データベースのアクセス性能に大きく影響します。

■インデックスとはインデックスとは

    データベースのデータ検索の効率を高めるためのものです。ただし、データベースのデータ検索の効率を高めるためのものです。ただし、PRIMARY KEYPRIMARY KEYややUNIQUEUNIQUEを指定する場合にデータの一意性を保障する手段を指定する場合にデータの一意性を保障する手段として指定する場合もあります。として指定する場合もあります。

■インデックスの特徴インデックスの特徴

・インデックスは、データベースに格納されているデータを効率よく検索する・インデックスは、データベースに格納されているデータを効率よく検索するために使用します。ために使用します。

・インデックスの設計および利用は、データベースのアクセス性能に大きく影・インデックスの設計および利用は、データベースのアクセス性能に大きく影響します。響します。

PointPoint

PointPoint

 インデックスの注意事項

■インデックスのディスク容量が必要

インデックスを作成すると、作成したインデックス分、データベース容量が必要になります。

■インデックスは実表の列に対して定義する

インデックスは実表の列に対して定義します。ビュー表には定義できません。

■インデックスの個数

 インデックスを作成した方が、データの検索処理性能は向上しますが、逆にインデックスを構成する列の更新または行の追加によって、インデックスのデータを更新する必要があります。この結果、インデックスの増加にともないインデックスの更新処理が性能に影響をおよぼすようになります。

 インデックスは、条件を限定する列や結合カラムの条件に利用する列等必要 小限の列に付加することが重要です。

Page 82: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 72

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 72

2.2.8.1 インデックスの定義インデックスの仕組み

6123

19

110111

 : :

ポインタ製品番号

:1

21122

倉庫番号

:冷蔵庫

テレビ冷蔵庫洗濯機CDプレーヤー

テレビ

製品名

:60

8515751200

在庫数量

6123

12345

110227124140212

::

行製品番号

製品番号“123”を検索

在庫表インデックス在庫表インデックス

在庫表在庫表

ポインタ“6”をもとに6行目に製品番号が”123”のデータが存

在することがわかる

 インデックスは、インデックスを付加する列(キーと呼びます。上図では、製品番号)の値を値の順番にソートして並べておき、この値に対応した表の行の行識別子(ポインタ)をベアで作成したものです。

インデックスのキーの値(例 KEYCOL=100)またはキーの値の範囲(例:KEYCOL BETWEEN 100 AND 200)に

対応する行の識別子からダイレクトに表の行を取出すことができます。この仕組みにより、効率的な検索が可能になります。

 インデックスの定義は、DSO定義により行います。

※DSO、DSIに関しては、「2.7.3 Symfowareデータ構造」で説明します。

Page 83: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 73

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 73

2.3 定義変更

表の変更

表の削除

スキーマの削除

表の定義の変更および削除、スキーマの削除について、解説します。

Page 84: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 74

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 74

2.3.1 表の変更会社表に、取引実績 列 を追加する

ALTER TABLE ST.会社表 ADD 取引実績 CHAR(4) DEFAULT ‘無’ NOT NULL

会社表から、住所 を削除する

ALTER TABLE ST.会社表 DROP 住所

会社名 住所電話番号会社番号 住所会社名 取引実績電話番号会社番号

住所会社名 取引実績電話番号会社番号 会社名 取引実績電話番号会社番号

列名 データ型 列の制約

表の定義を変更する場合、SQL文のALTER TABLE文を使用します。

■列の追加

【構文】

 ALTER TABLE スキーマ名.表名 ADD 列名 データ型 [デフォルト指定] [列の制約]  ・ 追加する列は、既存の列の後になります。

■列の削除

【構文】

 ALTER TABLE スキーマ名.表名 DROP 列名

 ・対象表に列が1つしかない場合は、指定することはできません。

 ・対象列を構成列に含むインデックス、その列を参照しているビュー表、ストアドプロシジャ(プロシジャルーチン)、  トリガまたは一意性制約が存在している場合は削除できません。

Page 85: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 75

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 75

2.4 定義の削除

表の削除

スキーマの削除

表の定義の削除およびスキーマの削除について、解説します。

Page 86: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 76

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 76

2.4.1 表の削除

会社表を削除する

DROP TABLE ST.会社表

会社表が、削除されました

表名

CHAR(40)会社名

CHAR(80)CHAR(14)SMALLINT住所電話番号会社番号

 表を削除するには、SQL文のDROP TABLE文を使用します。

【構文】

 DROP TABLE スキーマ名.表名 [ RESTRICT | CASCADE ]

 ・CASCADEおよびRESTRICTは、“削除動作”と呼びます。削除動作を省略した場合のデフォルトは、

  RESTRICTです。

 ・CASCADEを指定した場合削除対象の表を指定したビュー表、プロシジャルーチンおよびトリガは

  すべて削除されます。

 ・CASCADEを指定した場合、削除する表に関連するDSO、インデックスのDSO、そのDSOに関連する

  DSIおよびインデックスのDSI等の表に関連するものが、すべて同時に削除されます。

 ・RESTRICTを指定した場合または削除動作を省略した場合、削除対象の表を指定したビュー表、

  プロシジャルーチン、(ストアドプロシジャのこと)、トリガ、削除する表に関連するDSO、

  インデックスのDSO、そのDSOに関連するDSIおよびインデックスのDSI等の表に関連するものが

  存在する場合、表を削除することはできません。表を削除する場合には、表に関連した定義を事前に

  削除することが必要です。

Page 87: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 77

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 77

2.4.2 スキーマの削除

会社表を削除する

DROP SCHEMA ST

ST が、削除さ

れました

データベースデータベースデータベース

STSTST

 スキーマを削除するには、SQL文のDROP SCHEMA文を使用します。

【構文】

 DROP SCHEMA スキーマ名 [ RESTRICT | CASCADE ]

 ・CASCADEおよびRESTRICTは、“削除動作”と呼びます。削除動作を省略した場合のデフォルトは、

  RESTRICTです。

 ・CASCADEを指定した場合対象のスキーマに所属するオブジェクト(表、ビュー表、

  プロシジャルーチン、トリガ等)があっても強制的にすべて同時に削除されます。

 ・RESTRICTを指定した場合または削除動作を省略した場合、削除対象のスキーマに含まれる表、

  ビュー表、プロシジャルーチン、トリガが定義されているスキーマを削除することはできません。

  スキーマを削除する場合には、まずスキーマに所属するオブジェクトを削除してから、

  スキーマを削除することが必要です。

※ DSOまたはDSI関しては、「2.7.3 Symfowareのデータ構造」で説明します。

Page 88: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 78

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 78

2.5 認証とアクセス権限

ユーザの認証

アクセス権限の取消し

アクセス権限の付与

ロール

表のデータが、誰でも参照、更新および削除が可能な場合、不正アクセスにより、機密情報が外部に流出したり、誤操作によりデータの改ざんされたり、消去されたりする可能性があります。 このようなことが起こらないよう、セキュリティ設定をする必要があります。

Page 89: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 79

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 79

2.5.1 ユーザの認証

Symfowareの認証は、以下の2種類があります。

■ Symfowareに利用者を登録する

  データベース専用の利用者をCREATE USER文で登録し、

 アクセス権限を設定。  

■ Symfowareに利用者を登録しない

  OSにログインできる利用者に対して、アクセス権限を設定。

SymfowareSymfowareの認証は、以下の2種類があります。の認証は、以下の2種類があります。

■ ■ SymfowareSymfowareに利用者を登録するに利用者を登録する

   データベース データベース専用の利用者を専用の利用者をCREATE USERCREATE USER文で登録し、文で登録し、

 アクセス権限を設定。 アクセス権限を設定。   

■ ■ SymfowareSymfowareに利用者を登録しないに利用者を登録しない

    OSOSにログインできる利用者に対して、アクセス権限を設定。にログインできる利用者に対して、アクセス権限を設定。

 Symfowareに利用者を登録して、データベースへのアクセスなどの操作を制限する場合、CREATE USER文で

利用者の登録を行います。

OSで管理する方法の場合は、CREATE USER文で明に利用者を登録する必要はありません。

 スキーマや表などのデータベース資源を定義するユーザやSymfowareのコマンドを利用するユーザは、OSのア

カウントを利用する必要があります。

 スキーマや表などのデータベース資源を定義したとき、資源の定義者にすべての権限が与えられます。

■CREATE USERの基本構文

CREATE USER 認可識別子 WITH {DBMS PASSWORD パスワード | OS}  FOR USER

・ 認可識別子には、RDBシステムに登録する利用者の名前を指定します。

・ WITH句で「OS」と指定した場合、CREATE USER文で指定した認可識別子(Symfowareデータベース上のユー ザ名)をOSのユーザ名に対応させ、OSのパスワード認証機構を使って認証します。

・ WITH句で「DBMS」と指定した場合は、認可識別子(Symfowareデータベース上のユーザ名)とそのパスワードを Symfowareが管理します。

Page 90: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 80

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 80

2.5.2 権限の付与

■GRANTの基本構文

 GRANT { 権限 | ALL PRIVILEGES }

   ON 対象 TO { 権限受領者 | PUBLIC | ROLE ロール名}

[WITH GRANT OPTION]

 ・権限 : 付与するSELECT, UPDATE, INSERT,DELETEなどの動作を      “,”で区切って指定します。

 ・ALL PRIVILEGES: 全権限を付与します。

 ・対象: SCHEMA スキーマ名、 [TABLE] 表名などを指定します。

 ・権限受領者 : 権限を付与するユーザ名を指定します。

 ・PUBLIC: 全ユーザに権限を付与します。

 ・ロール名: ロールに権限を付与します。

 ・WITH GRANT OPTION : 権限を付与する権限(付与権)も与えます。  

        

■■GRANTGRANTの基本構文の基本構文

  GRANT { GRANT { 権限権限 | | ALL PRIVILEGES } ALL PRIVILEGES }

      ON ON 対象対象 TO { TO { 権限受領者権限受領者 | | PUBLIC | ROLE PUBLIC | ROLE ロール名ロール名}}

[[WITH GRANT OPTION]WITH GRANT OPTION]

 ・ ・権限権限 ::  付与する付与するSELECT, UPDATE, INSERTSELECT, UPDATE, INSERT,,DELETEDELETEなどなどの動作の動作を   を         ““,,””で区切って指定で区切って指定しますします。。

 ・ ・ALL PRIVILEGESALL PRIVILEGES: : 全権限全権限をを付与付与しますします。。

  ・対象:・対象:  SCHEMA SCHEMA スキーマ名、スキーマ名、 [[TABLE] TABLE] 表名表名などを指定します。などを指定します。

  ・権限・権限受領者受領者 : : 権限を付与するユーザ名を権限を付与するユーザ名を指定します。指定します。

 ・ ・PUBLICPUBLIC: : 全ユーザに権限を付与します。全ユーザに権限を付与します。

 ・ロール名: ロールに権限を付与します。 ・ロール名: ロールに権限を付与します。

 ・ ・WITHWITH GRANT OPTION GRANT OPTION : : 権限を付与する権限(付与権)も与えます。 権限を付与する権限(付与権)も与えます。  

        

PointPoint

 権限の付与は、GRANT文を使用します。本構文は、よく利用される基本部分のみの構文です。

 GRANT文では、資源に対して、誰にどんな権限を与えるかを指定することができます。

 WITH GRANT OPTIONは、権限受領者を指定した場合のみ与えることができます。

■権限

 代表的なものは、以下があります。それぞれのDML、DDLを発行する権限を表します。

  SELECT, UPDATE, INSERT, DELETE, DROP, ALTER、CREATE

■ロール名

 権限のグループであるロールに権限を付与します。“2.5.4 ロール”を参照。

Page 91: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 81

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 81

2.5.3 権限の取り消し

■REVOKEの基本構文

 REVOKE [GRANT OPTION FOR] { 権限 | ALL PRIVILEGES }

  ON 対象 FROM {権限受領者|PUBLIC | ROLE ロール名}

 ・GRANT OPTION FOR: “付与権”のみを取消します。

 ・権限 : 取消すSELECT, UPDATE, INSERT,DELETEなどの動作を

      “,”で区切って指定します。

 ・ALL PRIVILEGES: 全権限を取り消します。

 ・対象: SCHEMA スキーマ名、 [TABLE] 表名などを指定します。

 ・権限受領者 : 権限を取消すユーザ名を指定します。

 ・PUBLIC: 全ユーザから権限を取消します。

 ・ロール名: ロールから権限を取消します。           

■■REVOKEREVOKEの基本構文の基本構文

  REVOKE [GRANT OPTION FOR] { REVOKE [GRANT OPTION FOR] { 権限権限 | | ALL PRIVILEGES } ALL PRIVILEGES }

    ON ON 対象対象 FROM {FROM {権限受領者権限受領者||PUBLIC | ROLE PUBLIC | ROLE ロール名ロール名}}

 ・ ・GRANT OPTION FORGRANT OPTION FOR:: ““付与権付与権””のみを取消します。のみを取消します。

 ・権限 ・権限 ::  取消す取消すSELECT, UPDATE, INSERTSELECT, UPDATE, INSERT,,DELETEDELETEなどなどの動作の動作をを

            ““,,””で区切って指定で区切って指定しますします。。

 ・ ・ALL PRIVILEGESALL PRIVILEGES: : 全権限全権限をを取り消します。取り消します。

 ・対象:  ・対象: SCHEMA SCHEMA スキーマ名、スキーマ名、 [[TABLE] TABLE] 表名などを指定します。表名などを指定します。

  ・権限・権限受領者受領者 : : 権限を取消すユーザ名を権限を取消すユーザ名を指定します。指定します。

 ・ ・PUBLICPUBLIC: : 全ユーザから権限を取消します。全ユーザから権限を取消します。

 ・ロール名: ロールから権限を取消します。   ・ロール名: ロールから権限を取消します。           

PointPoint

権限の取り消しは、REVOKE文を用いて行います。本構文は、よく利用される基本部分の構文です。

GRANT OPTION FORは、GRANT文のWITH GRANT OPTIONで与えた“付与権”のみを取消します。

■権限

 代表的なものは、以下があります。それぞれのDML、DDLを発行する権限を表します。

  SELECT, UPDATE, INSERT, DELETE, DROP, ALTER, CREATE

■ロール名

 権限のグループであるロールから権限を取り消します。“2.5.4 ロール”を参照。

Page 92: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 82

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 82

2.5.4 ロール

■ロールを利用した権限操作

 (1) ロールの定義

   CREATE ROLE ロール名

 (2) ロールへの権限を付与と取り消し

   GRANT文でロールに権限を付与

   REVOKE文でロールから権限を取消し

 (3) ロールの利用者への付与(GRANT)と取り消し(REVOKE)

   GRANT ロール名 [, ロール名]。。。

    TO { 権限受領者 | PUBLIC}

   REVOKE ロール名 [, ロール名]。。。

    FROM { 権限受領者 | PUBLIC}

■ロールを利用した権限操作■ロールを利用した権限操作

 (1) ロールの定義 (1) ロールの定義

      CREATECREATE  ROLEROLE  ロール名ロール名

 (2) ロールへの権限を付与と取り消し (2) ロールへの権限を付与と取り消し

      GRANTGRANT文でロールに権限を付与文でロールに権限を付与

      REVOKEREVOKE文でロールから権限を取消し文でロールから権限を取消し

 (3) ロールの利用者への付与 (3) ロールの利用者への付与((GRANTGRANT))と取り消し(と取り消し(REVOKE)REVOKE)

      GRANT GRANT ロール名ロール名 [, [, ロール名]。。。ロール名]。。。

       TO { TO { 権限受領者権限受領者 | | PUBLIC}PUBLIC}

      REVOKE REVOKE ロール名ロール名 [, [, ロール名]。。。ロール名]。。。

       FROM { FROM { 権限受領者権限受領者 | | PUBLIC}PUBLIC}

PointPoint

ロールとは、1つの業務で必要な権限をグループ化したものです。ある業務で必要な権限をまとめて設定する場

合は、ロールを定義します。ロールを定義すると、すべての利用者にそのロールの権限を付与することができ、権限管理の効率化を図ることができます。

 ・ロールの定義は、CREATE ROLE文で行います。

 ・作成したロールに権限を付与するには、GRANT文を利用します。定義したロールに対して、

  データベース内の表をアクセスするための権限を付与します。権限取り消しはREVOKE文を利用します。

 ・GRANT文で権限が付与されたロールを、利用者に対して付与します。

 ・利用者からのロールの削除はREVOKE文を利用します。

Page 93: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 83

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 83

2.6 トランザクションとは

4,500,0004,000,000525

499,475

振込み手数料 3,314

2,5703,140

電気ガス水道振込み 4,000,000

31,25028,68025,540

4,025,540

②預金残高=預金残高+4,000,000

通帳A通帳A 通帳B通帳B

不慮のシステムダウン①の処理だけで終了すると、

データに矛盾が発生する

通帳Aから通帳Bへ400万円を振り込む

①預金残高=預金残高ー4,000,000

摘要 お払戻金額 お預り金額 差引残高 摘要 お払戻金額 お預り金額 差引残高

一連のデータ操作の例

 データベースのアクセスでは、順次データベースを更新したり、いくつかのSQL文をまとめてデータベースを更新したりすることが可能です。

 一連のデータ操作の一貫性を保証したい場合、それらのSQL文をひとまとめにして実行し、データベースを更新

します。

上の例は、通帳Aの預金から400万円分を通帳Bに振り込む場合を表しています 。

 内部的には、以下の2つの処理をします。

 ①通帳Aの預金残高から400万円分を差し引く

 ②通帳Bの預金残高に400万円分を加える

 ①のデータ操作の直後に不慮のシステムダウンなどが発生すると、400万円分の預金が消失してしまいます。

 この場合、①の処理と②の処理を両方とも有効にするか、または両方とも無効にする必要があります。

 このように、一連のデータ操作の一貫性を保証する単位をトランザクションと呼びます。

Page 94: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 84

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 84

2.6.1 トランザクションの特性

①コミットまたはロールバックしかない

COMMIT

ROLLBACK

②排他制御の単位

排他 排他 排他

③障害回復の単位

不慮のシステム障害発生

回復処理

トランザクション制御の特性

 トランザクションには、以下の特性あります。

■トランザクション制御

 トランザクションは、処理結果が反映されて(コミット)終了するか、もしくは、処理結果が反映されず破棄されて(ロールバック)終了します。

■排他制御

 同時に実行している他のトランザクションからの影響を受けて、データに矛盾が発生しないように制御することを排他制御と呼びます。

 トランザクションは排他制御の単位です。

■障害回復

 DBMSは不慮のシステムダウンなどが発生した場合、トランザクションの結果を保証する機能を持っています。

 トランザクションは障害回復の単位です。

Page 95: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 85

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 85

2.6.1.1 トランザクションの開始トランザクションの開始

データベースへ接続

INSERT

INSERT

SELECT

UPDATE

SET TRANSACTION ~トランザクションの開始

トランザクションは、データ操作文(DML)を実行することで開始されます。

※SET TRANSACTION文は、トランザクションモードを宣言するためのSQL文であり、トランザクションに含まれま

せん。

Page 96: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 86

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 86

2.6.1.2 トランザクションの終了トランザクションの終了

データベースへ接続

INSERT

DELETE

SET TRANSACTION ~

トランザクションの終了

トランザクションの開始

トランザクションの終了

SET TRANSACTION ~

データベースから切断

トランザクションの開始

ROLLBACK

SELECT

COMMIT

INSERT

トランザクションは、COMMIT文またはROLLBACK文の発行時に終了します。

 ■COMMIT文

  ・トランザクション内でのデータ操作をすべてデータベースに反映(*1)します。

  ・トランザクション内で獲得したロックをすべて解放します。

 ■ROLLBACK文

  ・トランザクション内でのデータ操作をすべて取り消します。

  ・トランザクション内で獲得したロックをすべて解放します。

 ■アプリケーションの途中終了やダウン時

  ・トランザクションがCOMMIT文やROLLBACK文を発行する前にデータベースから切断しようとするとエラーと 

   なります。

  ・トランザクションがCOMMIT文を発行して正常終了する前に、正常や異常に関わらずアプリケーション

   が終了した場合あるいはシステムがダウンした場合はトランザクションの更新操作はすべてとり消けされます。

*1 データベースにデータ操作結果を反映するとは、具体的にはデータベースのログファイルに更新結果の差  

 分を書き込みます。表のデータベーススペースには、トランザクションとは非同期に(トランザクション終了前また  はトランザクション終了後のいずれになるかは不定)書き込まれます。

  このようにデータベースのデータの更新前に更新のログを先に書き込む方法をデータベースの用語で、      WAL(Write Ahead a Log)と呼びます。

Page 97: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 87

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 87

2.6.2 ロックと排他制御排他制御がない場合

A B C D E

①Aさんが空席を参照②Bさんが空席を参照

③AさんがD席を予約 ④BさんがD席を予約

⑤COMMIT ⑥COMMIT

空席

予約済み

ダブルブッキング

AさんBさん

複数の利用者が、1つのデータベースを利用する場合、ある利用者がデータベースを更新している間に、そのデー

タを他の利用者が更新すると、データ矛盾を発生させます。

データベース管理システムは、このようなデータ矛盾を発生させないように排他制御を行います。

 一般には排他制御は、ロック(占有)機能を使用します。

ロックの単位としては、DSI、ページおよび行の3種類があります。

ロックの強さについては、トランザクションごとに指定する独立性水準と、SQL文ごとに指定するイルシデーションロッ

クがあります。

上の図では、座席予約の時、排他制御がないために、データが矛盾する例です。

Page 98: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 88

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 88

sel

upd

2.6.2.1 独立性水準

DBDB

2020 R

2020 C

sel 1010

101020201010 2020 1010 1010 1010 1010 30301010

sel1010

del (10) C

A1

Bru

Brc

A2

Brr

A3

Bsr

C sel

ins(30)3030

sel3030

3030

C

sel 3030

3030

sel C

3030

sel3030

C

ins(40)4040

C

3030 30304040

t01 t02 t03 t04 t05 t06 t07 t08 t09 t10 t11 t12 t13 t14 t15 t16 t17

aaabbb

ccc

ddd

C

SerializableSerializableRepeatable ReadRepeatable Read

Read CommittedRead CommittedRead UncommittedRead Uncommitted

一度参照した条件で何度参照しても結果が同じ

一度参照できたデータは何度参照しても同じ

コミット済データのみ参照

未コミットデータも参照する

*C:commitcommit, R:rollbackrollback *sel:SELECTSELECT。。。。。。WHEREWHERE  COLVALCOLVAL  BETWEENBETWEEN 10  10 ANDAND 50 50

Ax:更新SQLtransaction

Byy:参照SQLtransaction

AxAx:更新SQLtransaction

Byy:参照SQLtransaction

 SQLを発行すると、Symfoware Serverによって自動的にロックがなされます。独立性水準を設定することによって

同時実行性を高めることができます。

・更新系SQL(INSERT、UPDATE、DELETE)文の更新対象部分へのロックや、検索(SELECT)でも更新を目的 としたSQL文のロックはSymfoware Serverにより自動的になされ、制御したり水準を指定することはできません。

・ 参照系のSQL(SELECT)で更新を目的としないものは、独立性水準によりその度合いを制御できます。

 独立性水準には、以下の4つの種類があります。

■READ UNCOMMITTED 他のトランザクションが更新して、未コミットの状態の行でも参照します。基本は参照でロックを行いません。

 例:Bruは、A1がUpdateにより行を更新した後まだコミットしていない状態(t03)でそのデータを参照することがあります。このデータ20は、A1が後(t04)にロールバックするため正しい値ではありません。

■READ COMMITTED 過去にコミット済のデータのみ参照します。基本は参照のSQL文(SELECT、OPEN)が終了すると、トランザクション途中でもロックを解除します。(無論同一トランザクションの更新系のSQLのロックは解除されません)

 例:Brcは、A1がコミットしたデータを(t05)時点で参照SQL文で参照します。しかし、SQL文が終了後にロックを解除するため、(t11)時点で再度同じSQL文を実行すると、前回読めたデータ20がなくなっています。t13も同様で

す。つまり過去にコミット済のデータを参照するが、現在 新かどうかは保証されません。

■REPEATABLE READ・・・・( READ COMMITTEDの条件も同時に満たします)

 一度参照できたデータは何度参照しても同じことが保証されます。基本は参照系SQLで取得したロックはトランザクションの終了まで保持します。しかし、追加(INSERT)がされる可能性があります。

 例:Brrは、(t06)で参照したデータ10は、Brrがコミットを発行するまで保証されます。A2の削除はBrrがコミットを発行するまで待たされます。しかし、データの追加(INSERT)が同時に動作するため、(t11)時点では存在しないデータが再度同じ条件(例えばWHEREの条件がBETWEEN 10 AND 50)SQL文を実行すると、前回存在しなかったデータ30が(t13)で検索されます。

■SERIALIZABLE・・・・( REPEATABLE READおよびREAD COMMITTEDの条件も同時に満たします)

 一度参照した条件で何度参照しても結果が同じです。具体的には、指定条件の範囲にデータが追加されていることがありません。つまり、全ての矛盾が生じないがもっとも同時走行性が制限されることになります。本水準にはページロックが必要で、行ロックを利用すると SERIALIZABLEにすることはできません。

 例:Bsrは(t13)時点でデータ30を検索しようとしますが、A3がINSERTを実施後、コミットが完了した(t15)時点で

データ30を参照します。

Page 99: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 89

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 89

2.6.2.2 イルシデーションロック

EXCLUSIVE LOCK

SHARE LOCK

FREE LOCK

NO LOCK

 SQL文に占有モード指定を指定することにより、参照系のSQL文が読み込んだ資源(データおよびインデックス)の占有モードと占有期間を柔軟に変更することができます。

■EXCLUSIVE LOCK 非共有モードで、トランザクション終了まで資源を占有します。当該トランザクションが終了するまで、同じ資源を参照、更新する他のトランザクションを待たせます。

■SHARE LOCK 共有モードで、トランザクション終了まで資源を占有します。SQL文の実行後は、当該トランザクションが終了する

まで、同じ資源を更新する他のトランザクションを待たせます。

■FREE LOCK 共有モードで、SQL文終了(カーソルならば、OPEN文終了時)まで資源を占有します。当該SQL文の実行中は、同じ資源を更新する他のトランザクションを待たせます。当該SQL文の実行が終了すると、同じ資源を更新する他

のトランザクションを実行することができます。

 独立性水準のREAD COMMITTEDのロック水準に相当します。違いは、独立性水準は、制御文や実行環境として水準を設定しますが、FREE LOCKは、個々のSQL文で指定する点です。

■NO LOCK 資源を占有しません。当該SQL文を実行しても、他のトランザクションを待たせません。

 独立性水準のREAD UNCOMMITTEDのロック水準に相当します。違いは、独立性水準は、制御文や実行環境として水準を設定しますが、FREE LOCKは、個々のSQL文で指定する点です。

Page 100: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 90

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 90

2.7 Symfowareアーキテクチャ

Symfowareのプロセス構成

Symfowareの構成

Symfowareのメモリ構成

Symfowareのファイル構成

Page 101: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 91

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 91

2.7.1 Symfowareのファイル構成

RDBディレクトリファイル2

RDBディクショナリ

RDBディレクトリファイル1

テンポラリログファイル(AIログ域)

アーカイブログファイル

テンポラリログファイル(BIログ域)

ソート作業域

データベーススペース

RDB構成パラメタファイル

システム用の動作環境ファイル

クライアント用の動作環境ファイル

制御ファイル制御ファイル

データベースファイルデータベースファイル

ログファイルログファイル

パラメタファイルパラメタファイル

監査ログデータベース

サーバ用の動作環境ファイル

ログ管理ファイル

■Symfowareのファイル構成

 Symfoware は、Symfowareに対する動作環境を指定するパラメタファイル、他のファイルを制御または管理する、

制御ファイル、更新データの履歴であるログファイル、データを格納するデータベースファイルで構成されています。

Page 102: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 92

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 92

2.7.1.1 パラメタファイル

RDB構成パラメタファイル

システム用の動作環境ファイル

クライアント用の動作環境ファイル

パラメタファイルパラメタファイル

サーバ用の動作環境ファイル

・RDBディレクトリファイル・ログ管理ファイル・システム用の動作環境ファイル などの配置先を記載

 パラメタファイルには、Symfowareプロセスの基本的な動作環境を設定します。パラメタファイルには以下のもの

があります。

■RDB構成パラメタファイル

RDB構成パラメタファイルは、RDBディレクトリファイルの配置先など、Symfowareの動作を規定する各種情報が格納されたファイルです。

■動作環境ファイル

応用プログラムを実行する時、動作環境をチューニングするための情報が格納されたファイルです。システム用、サーバ用、クライアント用の3つがあります。

Page 103: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 93

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 93

2.7.1.2 データベースファイル

RDBディクショナリ

ソート作業域

監査ログデータベース

データベースファイルデータベースファイル

RDBディクショナリの配置先は、作成時に指定

データベーススペースの配置先は、作成時に指定

データベーススペース

 Symfowareプロセスの使用するデータベースファイルには以下のものがあります。

■RDBディクショナリ

 RDBディクショナリには、利用者が作成したデータベースに関する以下の情報が格納されます。

・データベースの論理構造に関する情報

・データベースの格納構造に関する情報

・データベースの物理構造に関する情報

■データベーススペース

 データベーススペースには、利用者が作成するデータが格納されます。

■監査ログデータベース

 監査ログデータベースには、管理者や利用者のデータベース処理を追跡するための情報が格納されます。

■ソート作業域、作業用テーブル域

 Symfowareが使用する磁気ディスク上のソート作業域、作業用テーブル域のことです。

Page 104: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 94

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 94

2.7.1.3 制御ファイル

RDBディレクトリファイル2

RDBディレクトリファイル1

制御ファイル制御ファイル

データベース管理用のディレクトリファイル

RDBディクショナリ管理用のディレクトリファイル

ログ管理ファイル

 Symfowareプロセスの使用する制御ファイルには以下のものがあります。

■RDBディレクトリファイル

 RDBディレクトリファイルには、データベースをアクセスするための情報や、現在の運用情報などが記憶されます。

 RDBディレクトリファイルには、以下のものがあります。

 ・データベース管理用のディレクトリファイル

 ・RDBディクショナリ管理用のディレクトリファイル

■ログ管理ファイル

 テンポラリログファイルやアーカイブログファイルの配置位置や、現在使用中のアーカイブログファイルの情報を保持するためのファイルです。

Page 105: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 95

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 95

2.7.1.4 ログファイル

アーカイブログファイル

テンポラリログファイル(BIログ域)

ログファイルログファイル

ROLLBACK文の実行に使用

メディアリカバリに使用

テンポラリログファイル(AIログ域)

ダウンリカバリに使用

 トランザクションのログを記録するためのログファイルには以下のものがあります。

■テンポラリログファイル

テンポラリログファイルには、データベースの更新履歴が収集されます。更新履歴には、データの更新前の情報

と更新後の情報があります。

  更新前(BIログ域):

    トランザクションのロールバック時およびSymfowareのダウン後のダウンリカバリ処理に使用されます。

  更新後(AIログ域):

    Symfowareのダウン後のダウンリカバリ処理に使用されます。

■アーカイブログファイル

アーカイブログファイルは、トランザクションの更新履歴を、メディアリカバリに備えて保存するファイルです。

Page 106: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 96

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 96

データベース用プロセスデータベース用プロセス

2.7.2 Symfowareのプロセス構成

監視用プロセス監視用プロセス

データベース共用バッファ共用バッファ

ソート作業域ソートメモリ

通信バッファ通信バッファ

テンポラリ

ログファイル

監視

ログバッファ(BI)

アーカイブ

ログファイル

ログバッファ(AI)

ワークメモリ

アプリケーション

(サーバ内)

アプリケーションアプリケーション

(サーバ内)(サーバ内)

アプリケーション

(リモート)

アプリケーションアプリケーション

(リモート)(リモート)

■データベース用プロセス

 データベース用プロセスは、Symfowareプロセスとして、サーバシステム上に存在しています。

 代表的なメモリには以下があります。

 ・共用バッファを利用して、データベースの入出力を行います。

 ・ソートメモリ、ワークメモリは、SQLのソートおよび作業用のメモリです。

  メモリに収まらない場合は、本メモリを通じてソート作業域の入出力を行います。

 ・更新前(BI)ログバッファ、更新後(AI)ログバッファによりログファイルの入出力を行います。

 ・通信バッファは、サーバ内のアプリケーション(アプリケーションプログラムやrdbコマンド)

  との間で通信を行います。このバッファは共用メモリ上に獲得します。

■監視用プロセス

 監視用プロセスは以下の処理を行っています。

 ・データベース用プロセスが停止していないか

 ・データベース用プロセスがループ処理など異常な状態になっていないか

■アプリケーション

 サーバシステム上のアプリケーションやrdbコマンドは、共用メモリの通信バッファを利用します。

 リモートのアプリケーションはネットワークプロトコルを通じて通信します。

Page 107: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 97

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 97

2.7.3 Symfowareのデータ構造データベースデータベース

データベーススペース

スキーマ

インデックスDSI

インデックスDSO表DSI

表DSO

実データ

実表 ビュー表

実データ

物理構造物理構造

格納構造格納構造

論理構造論理構造

 以下にSymfowareのデータベースの構成要素について説明します。

■論理構造

 データベース構造を論理的に定義した構造です。スキーマ、実表およびビュー表などから構成されます。論理構造で定義したスキーマ、実表およびビュー表は、SQL文を使用してアプリケーションから操作できます。

■格納構造

 データベースにデータを格納するための記憶構造です。格納構造には以下の項目があります。

 ・表のデータを格納するための記憶構造

 ・インデックスの定義およびインデックスの記憶構造

 ・表を複数の運用単位に分割して運用する(パーティション)ための構造

 ・記憶構造を実際のスペース(物理構造)に割り当てる記憶ファイル

 格納構造は、論理構造で定義した実表に対するデータの記憶構造を定義する、実表やインデックスのDSOと、実表やインデックスと格納先のデータベーススペースとの対応づけを定義したDSIで構成されます。

■物理構造

 データを実際に格納する領域をデータベーススペースといいます。データベーススペースは名前を持ち、一つのデータベーススペースは一つのローデバイスまたはファイルで構成されます。

Page 108: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 98

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 98

2.7.3.1 表の領域割り当て 表の領域は、DSIとして格納構造で定義し、DSIにデータベーススペースを割り当てます。

割当領域(割当領域(X)X)

((データベーススペース)データベーススペース)

表表表

    論理構造   例:列定義

    論理構造    論理構造   例:列定義   例:列定義

    格納構造(記憶構造)    ・表の記憶構成、    ・インデックスの記憶構成    ・パーティションニング構成  

    格納構造(記憶    格納構造(記憶構造)構造)      ・表の記憶  ・表の記憶構成、構成、        ・インデックスの記憶・インデックスの記憶構成構成        ・パーティションニング構成・パーティションニング構成    

DSODSODSO

DSIDSIDSI 格納構造(記憶ファイル)

・初期サイズ、割当先(X)

格納構造(記憶格納構造(記憶ファイル)ファイル)

・初期・初期サイズ、サイズ、割当先割当先((X)X)

 論理構造の表は表の論理的な構成(列名定義や列属性定義、制約定義)を定義する構造であり、大きさの概念はありません。

 DSOは論理構造のデータを格納するための構造を(記憶構造)定義します。

 DSIはDSOの構造を物理構造であるデータベーススペースに割当てる構造(記憶ファイル)を定義します。

 同じDSO(表)に対してDSIを複数用意して並列の運用を行うことができます。これをパーティショニング(分割格

納)と呼びます。

【補足(ご参考)】

  多少無理がありますが、オブジェクト的な概念で擬似的に考えるなら、以下のようになります。

  ・表が抽象クラス

  ・DSOがクラス

  ・DSIはオブジェクト

  ・パーティションニングはオブジェクト(DSI)のアレイ

Page 109: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 99

All Rights Reserved, Copyright © FUJITSU LIMITED 2006 99

拡張用領域(拡張用領域(Y)Y)

((データベーススペース)データベーススペース)

割当領域(割当領域(X)X)

((データベーススペース)データベーススペース)

2.7.3.2 表の領域拡張表の領域拡張は、指定残容量になったら、拡大単位の大きさで、拡張用領域から拡大

初期サイズ(100M)、割当先(X)初期サイズ(100初期サイズ(100MM)、)、割当先(割当先(X)X)DSIDSIDSI

初期サイズ(100M)+

拡大単位(20M)、割当先(Y)

初期サイズ(100初期サイズ(100MM)+)+

拡大単位(20拡大単位(20MM)、)、割当先(割当先(Y)Y)DSIDSIDSI

残容量まで使用済

使用済使用済使用済

残容量残容量残容量

拡大済拡大済拡大済

残容量残容量残容量

拡大単位拡大単位拡大単位

拡大単位拡大単位拡大単位

空空空

使用済使用済使用済 空空空

領域拡張領域拡張

 表の領域の拡張定義方法は、表を割り当てたDSIに対してSymfoware のコマンドで定義(指定)します。

【拡張定義の指定方法概要】 

 rdbalmdsi  対象のDSI 拡張条件 拡張単位 拡張先 [,拡張先] 。。。

 拡張条件:拡張を行う条件として、表の残りの空容量(残容量)を指定

 拡張単位:拡張を一度にどれくらいにするかを指定

 拡張先:拡張用のデータベーススペース。複数指定可能。

■拡張の実行(図の説明)

 ・DSIの定義で、初期サイズ(100M)がXより割当られます。

 ・データ追加にともない空容量がrdbalmdsiで定義した残容量(20M)になったら

 ・拡大単位の大きさでYより割り当てられ拡大される(拡大はSQLのINSERTとは非同期に自動的に行われる)

 ・拡張結果、新容量は、初期サイズ(100M)+拡大サイズ(20M)=120M・再び、領域が使用され、空容量が残容量(20M)になると、次回の拡張が行われる。

Page 110: Symfoware Certified Associate V8 - cocolog-nifty.comkoitto.cocolog-nifty.com/blog/files/symfo-aso-v8-1.pdfSun、Sun Microsystems、SolarisおよびすべてのSolarisに関連する商標は、

All Rights Reserved, Copyright © FUJITSU LIMITED 2007 100

MEMO