- 9.1 INSERT文使用時のポイント
INSERT文で挿入する列名を省略した場合、全ての列に値を指定する必要がある。
- 9.2 DEFAULT値指定時のDML
列にDEFAULT値が指定してある場合、DMLにてDEFAULTを使用することができる。
(例)INSERT INTO VALUES (2000,DEFAULT,500)
(例)INSERT INTO VALUES (2000,DEFAULT,500)
- 9.3 小数点付NUMBER型
NUMBER(5,2)の場合(整数桁を3桁まで、少数桁を2桁まで格納)
◆123.45 → 問題なく格納
◆1234.56 → エラー(整数桁が1桁多い)
◆123.456 → 123.46で格納(小数第三位が丸められる)
◆123.45 → 問題なく格納
◆1234.56 → エラー(整数桁が1桁多い)
◆123.456 → 123.46で格納(小数第三位が丸められる)
- 9.4 TO_DATE関数の引数省略時のデフォルト値
月日を省略した場合
月:当月
日:1日
時間を省略した場合
午前0時0分0秒
月:当月
日:1日
時間を省略した場合
午前0時0分0秒
- 9.5 EMP表をCOPY_EMP表にコピーする場合
○ INSERT INTO COPY_EMP SELECT * FROM EMP
× INSERT INTO COPY_EMP AS SELECT * FROM EMP
× INSERT INTO COPY_EMP AS SELECT * FROM EMP
- 9.9 DELETE文の基本構文
DELETE [FROM] 表名
★"FROM"は省略できる
★"FROM"は省略できる
- 9.10 with check option
■INSERT、UPDATE、DELETE文の中で表の変わりに副問合せを使用した場合に、副問合せのWHERE句に違反する行を生成させない
(例)
◆INSERT INSERT INTO view1(
SELECT empno, ename, deptno FROM emp
WHERE deptno = 10
WITH CHECK OPTION)
VALUES (1010, 'JONY',20);
→エラー
◆UPDATE UPDATE(
SELECT empno, ename, deptno FROM emp
WHERE deptno = 10
WITH CHECK OPTION)
SET deptno = 20
FROM view1;
→エラー
◆DELETE DELETE句の場合はWHERE句に存在しない行は元々存在しないので、エラーになりません。
(例)
◆INSERT INSERT INTO view1(
SELECT empno, ename, deptno FROM emp
WHERE deptno = 10
WITH CHECK OPTION)
VALUES (1010, 'JONY',20);
→エラー
◆UPDATE UPDATE(
SELECT empno, ename, deptno FROM emp
WHERE deptno = 10
WITH CHECK OPTION)
SET deptno = 20
FROM view1;
→エラー
◆DELETE DELETE句の場合はWHERE句に存在しない行は元々存在しないので、エラーになりません。
- 9.11 TRUNCATE TABLE
- 表から全ての行を削除する
- DDL文なのでロールバックできない
→DELETE文より処理が速い(ロールバック情報を生成しないため)
- 表が利用していた領域が開放され、他のオブジェクトで再利用可能になる
→DELETE文の場合、領域はその表に対する以降のINSERT文で再使用される
- 削除トリガーを起動しない
- 外部キー制約(参照整合性制約)の親表を切り捨てることはできない
- 9.12 トランザクションの終了条件
【トランザクションが終了する場合】
- DDL文およびDCL文の実行
- DBを更新しているアプリケーション(SQL*Plus、iSQL*Plusなど)の終了
- システムクラッシュ
【トランザクションが終了しない場合】
- SAVEPOINT文の実行
- ROLLBACK TO (SAVEPOINT);の実行
- 9.14 自動ロールバックされるイベント
- DBを更新しているアプリケーション(SQL*Plus、iSQL*Plusなど)の終了
- システムクラッシュ
★DDL文、DCL文はCOMMITされる
- 9.17 読み取り一貫性
- 通常のSELECT文を実行してもロック待ちにはならない
→SELECT ~ FOR UPDATE で明示的にロックを確保することもできる
- 更新中のデータに対しSELECT文を実行すると、UNDOセグメント(ロールバックセグメント)のデータが使われる
- 1つのSELECT文の中で複数回同じデータを検索しても、SELECT文の開始時にコミットされたデータが保証される