トランザクションの完了 / 失敗
基本形
SQL の分類
SQL は次のように分類できる
DDL
(
Data Definition Language:データ定義言語
) テーブルを作る ( CREATE TABLE)
テーブル定義を変更する (ALTER TABLE)
テーブルを消去する (DROP TABLE)
インデックスを作る /変更する /消去する
CREATE/ALTER/DROP INDEX
ビューを作る /変更する /消去する
CREATE/ALTER/DROP VIEW
等々
DML (Data Manipulation Language
:データ操作言語
) 行を追加する (INSERT)
行を変更する (UPDATE)
行を消去する (DELETE)
行を読む (SELECT)
DCL (Data Control Language:
データ操作言語
) トランザクションの完了あるいは破棄の指示 (COMMIT/ABORT)
テーブルのロック
ビューの定義: ビューとは?
アプリケーションはテーブルの一部しか使わない
最初からテーブルの一部だけを見せる
カラム名などもアプリケーション専用にしてしまう
アプリケーションの追加変更などでテーブルの形が変 わってもアプリケーションは変更せずに済む
このような「仮想的な」表のことをビューと呼ぶ
テーブルと同じように扱うことができる
行の「変更」や「追加」「削除」には制限がつくこともある
ビューの定義: 基本形と例
基本形
CREATE VIEW ビュー名 ( カラム名 , ...) AS select 文;
例
CREATE VIEW 社長室 ( 部署名 , 部署 ID, 責任者 ) AS SELECT 部署名 , 部署 ID, 責任者 ID
FROM 部署
WHERE 部署 ID=1;
効果
SELECT 責任者 ID FROM 部署 WHERE 部署 ID=1;
SELECT 責任者 FROM 社長室;
少し複雑な SEL: サブクエリ
WHERE 句の中に SELECT がある例
SELECT 従業員名 FROM 従業員 WHERE 所属 ID IN
(SELECT 部署 ID FROM 部署
WHERE 部署名 LIKE '% 製造 %');
上記の意味:
読むカラム:従業員名
読むテーブル:従業員
条件:従業員の所属する部署の名前に「製造」が入ってい
ること
プログラム内部から SQL を使う
2 つのやり方がある
埋め込み SQL
プログラム言語を SQL で拡張する
API を使う
SQL を文字列としてデータベースに与える
JDBC, ODBC などいくつかの方法がある
埋め込み SQL
"EXEC SQL" で始まる文で拡張部を示す
拡張部では、 : で始まる単語で元のプログ ラムの変数を参照できる
「カーソル」を使ってプログラム言語との 橋渡しをする
SQL では一度に複数の行を読むことができる
プログラム言語では一度に一行しか処理でき ない
カーソルに SQL の結果をためて一行ずつプロ
グラム言語で処理する
埋め込み SQL の例
void foobar() { int i;
EXEC SQL BEGIN DECLARE SECTION;
char empname[100];
char lastname[50];
char firstname[50];
EXEC SQL ND DECLARE SECTION;
EXEC SQL DECLARE execCursor CURSOR FOR SELECT 従業員名, 姓ふりがな, 名ふりがな FROM 従業員
ODER BY 姓ふりがな, 名ふりがな;
EXEC SQL OPEN execCursor;
while (1) {
EXEC SQL FETCH FROM execCursor
INTO :empname, :lastname, :firstname;
printf(" 従業員名ふりがな: %s%s, 従業員名 %s\n", lastname, firstname, empname);
if (NO_MORE_TUPLES) break;
}EXEC SQL CLOSE execCursor;
}
埋め込み SQL で使うプロ グラム言語の変数宣言
カーソルの宣言
カーソルを開くとファイルのように一行ずつ 読める 一行ずつ読む