5 Q. 選択リストにアスタリスク (*) を使用して 位置に基づくソートを行うとどうなりますか A. その表を構成している列の順序に対応して 暗黙的に番号が割り振られます 6 Q. 文字データが日本語の場合 ソートは五十音順に行われるのですか A. 五十音順ではなく 文字コード順になります 文字コ

Similar documents
第 2 章 問合せの基本操作 この章では データベースから情報を検索する際に使用する SELECT コマンド および SELECT コマンドと 同時に使用する句について説明します 1. 問合せとは 2. 基本的な問合せ 3. 列の別名 4. 重複行を一意にする 5. 検索行の絞込み 6. 文字パター

Oracle 入門 ~ 研修受講後のスキルアップサポート ~ 対応バージョン :Oracle 10gR1 ~ 12cR1 本資料は アシスト Oracle 研修をご受講いただいたお客様からのご質問や 研修ではご案内できなかった情報などを FAQ にまとめたものです 研修受講後のスキルアップの一助とし

はじめに コースの概要と目的条件分岐の方法や複雑な集計の手法など SQL のコーディングの幅を広げるためのテクニックについて説明します また パフォーマンスを考慮した記述方法や正しい結果を取得するための記述方法などについても あわせて説明します 本コースでは 実践的な SQL の記述手法を広く浅く紹

第 1 章 条件分岐 この章では 条件に応じて処理を分岐する方法について説明します 1. CASE 式で複雑な条件分岐を実現 2. 関数を使用した条件分岐 3. MERGE 文による条件に応じた DML の実行

第 2 章 PL/SQL の基本記述 この章では PL/SQL プログラムの基本的な記述方法について説明します 1. 宣言部 2. 実行部 3. 例外処理部

プレポスト【問題】

アジェンダ ORACLE MASTER Oracle Database 11g 概要 11g SQL 基礎 Ⅰ 試験紹介 ポイント解説 Copyright 2011 Oracle. All rights reserved. 2

Microsoft PowerPoint - db03-5.ppt

第 5 章 結合 結合のパフォーマンスに影響を与える結合の種類と 表の結合順序について内部動作を交えて 説明します 1. 結合処理のチューニング概要 2. 結合の種類 3. 結合順序 4. 結合処理のチューニングポイント 5. 結合関連のヒント

標準化 補足資料

eラーニング資料 e ラーニングの制作目標 データベース編 41 ページデータベースの基本となる概要を以下に示す この内容のコースで eラーニングコンテンツを作成予定 データベース管理 コンピュータで行われる基本的なデータに対する処理は 次の 4 種類です 新しいデータを追加する 既存のデータを探索

Chapter Two

データベース マネジメント ~ 研修受講後のスキルアップ サポート ~ 対応バージョン :Oracle 10gR1 ~ 12cR2 本資料は アシスト Oracle 研修をご受講いただいたお客様からのご質問や 研修ではご案内できなかった情報などをまとめたものです 研修受講後のスキルアップの一助として

Microsoft PowerPoint - 講義補助資料2017.pptx

はじめに コースの概要と目的 Oracle をより効率的に使用するための SQL のチューニング方法について説明します また 索引の有無 SQL の 記述方法がパフォーマンスにどのように影響するのかを実習を通して理解します 受講対象者 アプリケーション開発者 / データベース管理者の方 前提条件 S

内容 Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作... 1 サーバーエクスプローラ... 4 データ接続... 4 データベース操作のサブメニューコンテキスト... 5 データベースのプロパティ... 6 SQL Server... 6 Microsoft

PowerPoint Presentation

はじめに コース概要と目的 Oracle を使用した開発 管理を行う上でのファースト ステップとして リレーショナル データベース管理ソフトウェアである Oracle の役割 基本機能 基本アーキテクチャを幅広く理解することを目的としています 受講対象者 これから Oracle を使用する方 データ

问题集 ITEXAMPASS 1 年で無料進級することに提供する

Microsoft PowerPoint - KeySQL50_10g_vlo2.ppt

第 3 章 メディア障害とバックアップ リカバリ この章では メディア障害の発生に備えたバックアップ方法と 障害時の基本的なリカバリ方法につい て説明します 1. メディア リカバリ概要 2. ファイルの多重化 3. アーカイブ モードの設定 4. バックアップ概要 5. 一貫性バックアップ ( オ

第 7 章 ユーザー データ用表領域の管理 この章では 表や索引を格納するユーザー データ用表領域の作成や 作成後のメンテナンスに ついて解説します 1. ユーザー データ用表領域の管理概要 2. ユーザー データ用表領域作成時の考慮事項 3. ユーザー データ用表領域の作成 4. ユーザー データ

5 Q. 結果セットを 1 行飛ばしに FETCH することはできますか A. できません Oracle は必ず結果セットを上から 1 行ずつ FETCH します 6 Q. カーソルを一度にいくつまでオープンできますか A. 初期化パラメータ OPEN_CURSORS で指定したの値までカーソルをオ

復習 (SQL 文 ) 3/6 復習 (SQL 文 ) 4/6 表の作成 CREATE TABLE...; 表の削除 DROP TABLE テーブル名 ; 表内のデータが全て消えてしまう. 表内のデータを得る SELECT 列名 FROM 表名...; 表にデータを挿入する. INSERT INTO

Oracle Direct Seminar <Insert Picture Here> 試験対策ポイント解説 11g SQL 基礎 Ⅰ 日本オラクル株式会社

Oracle Database Connect 2017 JPOUG

Microsoft PowerPoint pptx

Chapter Two

橡ExCtrlPDF.PDF

プレポスト【解説】

データベースS

Microsoft Word - Android_SQLite講座_画面800×1280

1 SQL Server SQL Oracle SQL SQL* Plus PL/SQL 2 SQL Server SQL Server SQL Oracle SQL SQL*Plus SQL Server GUI 1-1 osql 1-1 Transact- SQL SELECTFROM 058

3 - 正しい SQL ( 方言を排除した SQL 文の記述方法 )

SQLite データベース IS04 組み込み 1

1,.,,,., RDBM, SQL. OSS,, SQL,,.

Exam : J Title : Querying Microsoft SQL Server 2012 Version : DEMO 1 / 10

Excel2013 データベース1(テーブル機能と並べ替え)

結合演算 ( 復習 ) データベース論 (9) R 社員番号 氏名麻生太郎安部晋三与謝野馨森喜朗 部門経理課営業課総務課営業課 S 部門経理課営業課総務課 電話 問合せ言語と SQL(2) R S 社員番号

3/7 マイグレーション開発方針 顧客名 0 作成者 根岸正 < プログラム移行方針 > システム名称 A-VX システムマイグレーション作成日 2015/09/01 < COBOL 資産のプログラム移行 > COBOLソース ( メインとCOPYLIB) を入力としてSCC 言語変換ツールにてVB

Microsoft PowerPoint - 3-Forms-Others.ppt

PowerPoint Presentation

Microsoft Word - sample_adv-programming.docx

Calpont InfiniDBマルチUM同期ガイド

A. 前ページからの続きです DBMS_SPACE.UNUSED_SPACE の各パラメータの意味 segment_owner = オブジェクトの所有者 segment_name = オブジェクト名 segment_type = オブジェクトタイプ total_blocks = セグメント合計ブロッ

基本サンプル

PA4

PL/SQL プログラミング Ⅱ ~ 研修受講後のスキルアップサポート ~ 対応バージョン :Oracle 10gR1 ~ 12cR1 本資料は アシスト Oracle 研修をご受講いただいたお客様からのご質問や 研修ではご案内できなかった情報などを FAQ にまとめたものです 研修受講後のスキルア

第 3 章代表的なチューニングポイント 3 Q. ストアド プロシージャを使用した SQL 共有率の向上 A. ストアド プロシージャを使用した場合 同じストアド プロシージャを実行する複数のユーザーが 同じ共有 PL/SQL 領域を使用します また ストアド プロシージャは解析済みで格納されている

Microsoft PowerPoint - Lite10g_SyncArchitecture.ppt

,, create table drop table alter table

Microsoft Word - SQL.rtf

橡実践Oracle Objects for OLE

7-1- 基 RDB に関する基礎知識 1 独立行政法人情報処理推進機構

Microsoft PowerPoint - 第5章補足-DB2組み込みSQL.ppt

リレーショナルデータベース入門 SRA OSS, Inc. 日本支社 Copyright 2008 SRA OSS, Inc. Japan All rights reserved. 1

Oracle SQL Developer Data Modeler

Oracle Application Expressの機能の最大活用-インタラクティブ・レポート

基本サンプル

領域サイズの見積方法

KTest

PowerPoint プレゼンテーション

Exam : 1z0-882 日本語 (JPN) Title : Oracle Certified Professional, MySQL 5.6 Developer Vendor : Oracle Version : DEMO 1 / 4 Get Latest & Valid 1z0-882-JP

PowerPoint -O80_REP.PDF

DumpCollection IT Exam Training online / Bootcamp PDF and Testing Engine, study and practice

Oracle活用実践演習コース

PowerPoint プレゼンテーション

基本サンプル

ゲートウェイ ファイル形式

CodeGear Developer Camp

MS916/MS926 照合機能の操作方法 Ver.4 照合モード (Data Validation) では 1 対 1 1 対 N および LookUp テーブル参照によるバーコードの照合を行います 照合したバーコードは一致したデータのみをホストに送信またはメモリに保存します 照合機能の設定手順

電話機のファイル形式

CONTENTS マニュアルの表記... S01-02_01 1.DataNature Smart 全体概要図... S01-02_11 2. 基本操作... S01-02_ ジョブの作成... S01-02_21 加工条件設定... S01-02_21 Step1: 処理対象データの指

Oracle Un お問合せ : Oracle Data Integrator 11g: データ統合設定と管理 期間 ( 標準日数 ):5 コースの概要 Oracle Data Integratorは すべてのデータ統合要件 ( 大量の高パフォーマンス バッチ ローブンの統合プロセスおよ

Microsoft Word - J-jdev_dba_db_developers.doc

( 目次 ) 1. はじめに 開発環境の準備 仮想ディレクトリーの作成 ASP.NET のWeb アプリケーション開発環境準備 データベースの作成 データベースの追加 テーブルの作成

関係データベース

PowerPoint プレゼンテーション

このドキュメントに記載されている情報 (URL 等のインターネット Web サイトに関する情報を含む ) は 将来予告なしに変更することがあります このドキュメントに記載された内容は情報提供のみを目的としており 明示または黙示に関わらず これらの情報についてマイクロソフトはいかなる責任も負わないもの

データベース工学 2011年度資料

NEC COBOL SQL アクセス Server Runtime V1.0 COBOL SQL アクセス Server Runtime V1.0 (1 年間保守付 ) COBOL SQL アクセス Server Runtime V1.0 (1 年間時間延長保守付 ) セットアップカード SL438

橡j_Oracle_whitepaper.PDF

tkk0408nari

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

セットアップカード

SQL (2) データベース論 Ⅰ 第 7 回 URL 作成者末次文雄 C

Access研修テキスト

スライド 1

復習 (SQL 文 ) 3/6 復習 (SQL 文 ) 4/6 表の作成 CREATE TABLE...; 表の削除 DROP TABLE テーブル名 ; 表内のデータが全て消えてしまう. 表内のデータを得る SELECT 列名 FROM 表名...; 表にデータを挿入する. INSERT INTO

ユーザ デバイス プロファイルの ファイル形式

正誤表(FPT1004)

データベースアクセス

PostgreSQL SQL チューニング入門 ~ Explaining Explain より ~ 2012 年 11 月 30 日 株式会社アシスト 田中健一朗

ユーティリティ 管理番号 内容 対象バージョン 157 管理情報バッチ登録コマンド (utliupdt) のメッセージ出力に対し リダイレクトまたはパイプを使用すると メッセージが途中までしか出 力されないことがある 267 転送集計コマンド (utllogcnt) でファイル ID とホスト名の組

Agenda

Oracle Direct Seminar <Insert Picture Here> 体感型セミナー SQL をクイズ感覚で学ぶ! SQL クイズ 日本オラクル株式会社

Caché SQL に関するよくある質問

スライド 1

Oracle Liteデータベースの理解

目次 1 はじめに 利用条件 動作環境 アドインのインストール アドインの操作方法 アドインの実行 Excel CSV の出力 テンプレートの作成 編集 テンプレートのレイアウト変更 特記

Transcription:

SQL トレーニング ~ 研修受講後のスキルアップサポート ~ 対応バージョン :Oracle 10gR1 ~ 12cR1 本資料は アシスト Oracle 研修をご受講いただいたお客様からのご質問や 研修ではご案内できなかった情報などを FAQ にまとめたものです 研修受講後のスキルアップの一助として 是非お役立てください ご利用上の注意事項は最後のページにまとめられております ご確認のうえ ご利用ください 第 2 章問合せの基本操作 1 Q. 検索結果は何をもとに並べられているのですか A. 行が物理的に格納されている順番で返されます 行を DELETE した場合 その空いた領域に新規に INSERT した行が格納される場合があるので 必ずしも新しい行が物理的に最後に追加されるとは限りません 検索結果の順序を制御するには ORDER BY 句を使用してください 2 Q. 一意な値が何件あるか確認したい場合はどのような SQL 文を実行すればよいですか A. データの件数を求める COUNT 関数と 値を一意にして表示できる DISTINCT 句を組み合わせて使用します 会社に職種がいくつ存在しているか表示する SQL> SELECT COUNT(DISTINCT(JOB)) FROM EMP; COUNT(DISTINCT(JOB)) -------------------- 5 3 Q. ESCAPE 文字として使用できない文字を教えて下さい A. ESCAPE 文字は基本的に長さが 1 バイトであれば指定することができますが 中には使用できない文字も存在します 使用できない主な文字は以下のとおりです 1. 長さが 2 バイト以上の文字 ( 全角のひらがななど ) 2. 文字パターン内で使用されている文字 3.&('&' は SQL*Plus では置換関数を意味します ) 4 Q. SQL*Plus の DESCRIBE コマンド以外で 表の列構造を確認することはできますか A. USER_TAB_COLUMNS ビューを使用すると 表の各列に関する詳細情報を確認できます DESCRIBE の情報はビューの以下の列でご確認いただけます COLUMN_NAME 列名 DATA_TYPE データ型 DATA_LENGTH データ長 DATA_SCALE 数値の小数点以下の桁数 NULLABLE NULL 定義の可否を表示 1

5 Q. 選択リストにアスタリスク (*) を使用して 位置に基づくソートを行うとどうなりますか A. その表を構成している列の順序に対応して 暗黙的に番号が割り振られます 6 Q. 文字データが日本語の場合 ソートは五十音順に行われるのですか A. 五十音順ではなく 文字コード順になります 文字コードの種類はマシンによって異なりますが 主なものとして ASCII コードがあります Oracle では ASCII 関数を使用してコード数を調べることができます NAME 列のデータの文字コードを確認する SQL> SELECT name,ascii(name) FROM test 2 ORDER BY name ASC; NAME ASCII(NAME) -------------------- ----------- SMITH 83 わたなべ XXX 33517 伊藤 XXX 35017 なお 五十音順のソートを行いたい場合は 初期化パラメータ NLS_SORT を設定する必要があります 初期化パラメータ NLS_SORT の詳細については リファレンス マニュアルをご参照ください 7 Q. 値の大小に関係なく 特定行の順序制御を行う方法はありますか A. ORDER BY 句を使用した順序制御では 照合順位に従って昇順 降順の並び替えが行われます しかし ある行を最初や最後に表示したいといった 特定行に対する並び替えを行いたい場合は DECODE 関数と NULL の特徴を利用します ENAME 列をもとに昇順の並び替えを行う際に SCOTT さんの行を最初に表示する /* SCOTT を NULL と置き換え ソート時に一番小さな値として認識させる */ SQL> select ename,deptno,empno from emp 2 where deptno = 20 3 order by decode(ename,'scott',null,ename) 4 nulls first; ENAME DEPTNO EMPNO ---------- -------- -------- SCOTT 20 7788 ADAMS 20 7876 FORD 20 7902 以下省略 8 Q. グループ関数はどこまでネストすることができますか A. グループ関数は第 2 レベルまでネストを行うことできます 部門ごとの平均給与の最高額を表示する SQL> SELECT MAX(AVG(SAL)) FROM EMP GROUP BY JOB; 2

9 Q. GROUP BY 句を使用する際の注意事項 A. GROUP BY 句を使用する際は以下の点にご注意ください 1.GROUP BY 句には別名を指定できない 2.GROUP BY 句には副問合せを含めることができない 3. 式を含める場合は最大 255 個まで GROUP BY 句に別名を指定しているため エラーが発生する SQL> SELECT sum(sal),(select deptno from dept) AS demo FROM emp 2 GROUP BY demo; group by demo * 2 行でエラーが発生しました ORA-00904: 列名が無効です 10 Q. 日付関数に ROUND 関数を使用した場合の評価について A. データを四捨五入する ROUND 関数を日付関数と一緒に使用した場合 現在の日付に最も近い午前 0 時の日付に四捨五入されます 現在 2003 年 7 月 20 日午後 7 時の場合 SQL> SELECT TO_CHAR(round(sysdate),'YYYY/MM/DD HH24:MI:SS') AS days FROM dual; DAYS -------------------- 2003/07/21 00:00:00 11 Q. DECODE 関数で 不等価な条件で値を比較する方法はありますか A. DECODE 関数では不等価な条件での比較はできませんが CASE 式を使用することで可能です SELECT CASE WHEN 条件 THEN 処理 1 つ目の条件と合致した際の処理 WHEN 条件 THEN 処理 2 つ目の条件と合致した際の処理 ELSE 処理 どの条件にも合致しなかった際の処理 END CASE CASE 式を終了 FROM 表名 ; 第 3 章問合せの応用操作 12 Q. 自然結合で同名の列が複数存在する場合 どういう条件で結合されるのでしょうか A. 同名の列全てが 等価結合の条件として実行されます 例えば 2 つの表に A と B という同名の列が存在する場合 自然結合を行うと 以下の SQL と同等です SELECT * FROM EMP JOIN DEPT ON EMP.A=DEPT.A 同名 A 列の結合条件 AND EMP.B=DEPT.B; 同名 B 列の結合条件 3

13 Q. 結合条件に BETWEEN AND 演算子を使用した外部結合の方法 A. 結合条件に BETWEEN AND 演算子を指定した場合は BETWEEN 演算子の左辺 もしくは右辺に外部結合演算子 (+) を指定します 右辺には 2 列指定する事になりますが (+) の指定は片方の列でも両方の列でも値を戻すことができます EMP 表と SALGRADE 表の結合 /* EMP 表にしかないデータも結合の結果として表示する */ SQL> SELECT ENAME,SAL,GRADE FROM EMP,SALGRADE 2 WHERE SAL BETWEEN LOSAL(+) AND HISAL(+); /* SALGRADE 表にしかないデータも結合の結果として表示する */ SQL> SELECT ENAME,SAL,GRADE FROM EMP,SALGRADE 2 WHERE SAL(+) BETWEEN LOSAL AND HISAL; 14 Q. 集合演算とインラインビューを使用した時に インラインビュー内で ORDER BY 句を使用しているにも関わらず結果がソートされないのは何故ですか A. 結果がソートされることを保証できるのは 主問合せの式の最後に ORDER BY を使用したときのみです そのため 以下のような場合は検索結果がソートされることが保障されません SQL> SELECT ename,sal FROM (SELECT * FROM emp ORDER BY sal DESC) 2 WHERE ROWNUM <= 10 3 MINUS 4 SELECT ename,sal FROM (SELECT * FROM emp ORDER BY sal DESC) 5 WHERE ROWNUM <= 5; 第 5 章トランザクション制御 15 Q. DDL 操作で変更作業中の表に対し 処理を行うことはできますか A. 変更作業中の表に対して処理を行うことはできません DDL 操作では 変更作業中にデータの食い違いが発生しないように 表に対してロックを取得します (DDL DML がロック待機の対象になります ) このロックは DDL 処理が終了するまで取得されます 第 6 章 DDL の基本操作 16 Q. スキーマ名の変更はできますか A. SQL 文でスキーマ名の変更を行うことはできません スキーマ名の変更を行いたい場合はユーザーを再作成し DataPump Export/Import を使用してデータ移行を行います ユーザーの作成方法については データベース マネジメント コースでご紹介しています Data Pump Export/Import の詳細は ユーティリティ マニュアルをご参照ください 4

17 Q. NUMBER 型の特殊な精度の指定方法 A. NUMBER 型の特殊な精度の指定方法を 以下にご紹介します 正の値を表示させずに 小数点以下の桁数だけを指定する全体の精度に * を指定します 特定の桁数で強制的に四捨五入する小数点以下の精度指定に負の数値を指定すると 指定した桁数で四捨五入した値が挿入されます SQL> CREATE TABLE test 2 (a NUMBER(*,3), 小数点以下 3 桁のみを表示する 3 b NUMBER(5,-2)); 5 桁の数値を 2 桁目の数値で四捨五入して挿入する SQL> INSERT INTO test(a,b) 2 VALUES (0.387,12345); SQL> SELECT * FROM test; A B ---------- ----------.387 12300 18 Q. 列のデフォルト値や仮想列についての情報を確認する方法 A. 列のデフォルト値や仮想列についての情報は USER_TAB_COLUMNS ビューの以下の列で確認することができます DATA_DEFAULT 列 列のデフォルト値 ( 仮想列の場合は列式 ) が表示されます VIRTUAL_COLUMN 列 通常の場合は NO 仮想列の場合や YES と表示されます 19 Q. 仮想列は 問合せ文の選択リストにしか指定できないのですか A. 問合せ文のほか DML 処理の WHERE 句の条件値としても使用できます ただし 仮想列は実データを含みませんので UPDATE の SET 句などでデータを直接操作することはできません 20 Q. 複合主キー制約を定義する際の注意点 A. 表制約構文を使用することで複数列に一つの PRIMARY KEY 制約を定義することができます ただし 一つの複合主キーは 33 個以上の列を持つことはできません 5

21 Q. 副問合せを使用した表の作成 (AS SELECT での作成 ) を行う際にコピーされる NOT NULL 制約の名前はどのように定義されますか A. CONSTRAINT 句で制約名を指定しない場合と同じように Oracle が自動的に SYS_CXXX の形式で自動的に制約名を割り当てます 制約名を分かりやすいものに変更したい場合は ALTER TABLE RENAME 文を実行してください 22 Q. 1 つの CHECK 制約でユーザー任意の複数の条件を定義することは可能でしょうか A. CHECK 制約の条件の中で AND 論理演算子や OR 論理演算子を使用することで可能です TEST 表の A 列に大文字であることと 文字数が 4 文字以上のデータのみを許可する SQL> CREATE TABLE TEST 2 (A VARCHAR(10) CONSTRAINT CK_A CHECK(A = UPPER(A) AND LENGTH(A)>=4)); 23 Q. CHECK 制約の内容を確認することはできますか A. USER_CONSTRAINTS ビューの SEARCH_CONDITION 列を確認してください NOT NULL 制約が定義されている場合 この列に IS NOT NULL と表示されます EMP 表に定義されている制約の情報を確認する SQL> SELECT table_name,constraint_name,constraint_type,search_condition 2 FROM user_constraints 3 WHERE table_name = 'EMP'; TABLE_NAME CONSTRAINT_NAME C SEARCH_CONDITION ----------- ---------------- - -------------------- EMP ENAME_NOTNULL C "ENAME" IS NOT NULL NOT NULL 制約 EMP ENAME_CK C ENAME&gtLENGTH(3) CHECK 制約 24 Q. 既存データで制約に違反しているデータを特定する方法はありますか A. 制約作成時に exceptions オプションを指定することにより 制約に違反しているデータを EXCEPTIONS 表に取り出し特定することができます exceptions オプションの詳細については SQL 言語リファレンス マニュアルにてご参照ください EXCEPTIONS 表の詳細については リファレンス マニュアルをご参照ください 25 Q. 値の範囲をもとにして行うリレーションも FOREIGN KEY 制約によって保証することはできますか A. 値の範囲をもとにして行うリレーションは FOREIGN KEY 制約によって保証することはできません FOREIGN KEY 制約は 参照先に同じ値が 1 つだけあることを保証する制約だからです 値の範囲をもとにして行うリレーションを保証したい場合は トリガーを作成する必要があります トリガーの詳細については PL/SQL プログラミング Ⅰ コースでご紹介しています 6

26 Q. FOREIGN KEY 制約に定義したオプションのタイプを確認することはできますか A. USER_CONSTRAINTS ビューの DELETE_RULE 列で オプションの情報を確認することができます SQL> SELECT table_name,constraint_name,constraint_type,delete_rule 2 FROM user_constraints 3 WHERE table_name = 'REFTEST'; TABLE_NAME CONSTRAINT_NAME C DELETE_RU ----------- ---------------- - --------- REFTEST REF_KEY1 R NO ACTION オプションなし REFTEST REF_KEY2 R CASCADE ON DELETE CUACADE オプション付きの場合 REFTEST REF_KEY3 R SET NULL ON DELETE SET NULL オプション付きの場合 27 Q. FOREIGN KEY 制約を定義するときに REFERENCES 句で指定する参照先の列名を省略できますか A. 参照される表に PRIMARY KEY 制約が定義されていれば省略することができます ( 他にいくつ制約が定義されていても構いません ) 28 Q. ON DELETE CASCADE オプションによって削除された子表の行をロールバックする事はできますか A. ロールバックすることができます 親表の行を削除する処理も ON DELETE CASCADE オプションによって子表の行を削除する処理も同一トランザクション内で行われています そのため ロールバックコマンドを実行することで 親表の行を削除する処理と子表の行を削除する処理を取り消すことが出来ます 29 Q. ON DELETE SET NULL オプションを使用して親表の行を削除しようとしたとき 外部キーに NOT NULL 制約が定義されているとどうなりますか A. ON DELETE SET NULL オプションによって削除する行に対応する外部キーの値を NULL に更新しようとしますが 外部キーには NOT NULL 制約が定義されているためエラーとなります 30 Q. ON DELETE CASCADE ON DELETE SET NULL オプションは表作成後に追加することはできますか A. FOREIGN KEY 制約を同時に定義する場合に限りますが ALTER TABLE ADD CONSTRAINT 文を使うことで 表作成後にオプションを追加することができます 31 Q. FOREIGN KEY 制約を ON DELETE CASCADE オプション付きで設定したときに 親表の行を TRUNCATE するとどのような動作になりますか A. ON DELETE CASCADE オプションを使用して親表のデータを TRUNCATE することはできません この場合 TRUNCATE 実行時にエラーが返ります Oracle 12c からは親表の TRUNCATE 実行時に CASCADE オプションを指定することで 子表のデータもまとめて削除できます 7

32 Q. 無効な FOREIGN KEY 制約を有効に戻す際に 参照キーに設定された PRIMARY KEY 制約や UNIQUE KEY 制約を同時に有効にするオプションはありますか A. FORIGN KEY 制約と 参照キーに設定された制約を同時に有効にすることはできません 各制約を一つずつ有効に変更する必要があります ALTER TABLE DISABLE CONSTRAINT 文で CASCADE オプションを使用することで 各制約を同時に無効にすることはできます 33 Q. FOREIGN KEY 制約を定義して親表 子表 孫表という関係にある時に 親表の行を削除すると対応する子表 孫表の行まで削除させる事はできますか A. 子表 孫表に定義する FOREIGN KEY 制約をに対して それぞれオプション (ON DELETE CUSCADE ON DELETE SET NULL) を指定することで実現可能です 34 Q. 表やビューなどにコメントなどの説明文を加えることはできますか A. COMMENT コマンドを使用することで可能です 定義した内容は USER_TAB_COMMENTS ビュー ( 表に対するコメント ) または USER_COL_COMMENTS( 列に対するコメント ) で確認します COMMENT ON TABLE 表名 IS ' コメント '; 表に対してコメントを加える SELECT * FROM USER_TAB_COMMENTS; 表に対するコメントを確認する COMMENT ON COLUMN 表名. 列名 IS ' コメント '; 列に対してコメントを加える SELECT * FROM USER_COL_COMMENTS; 列に対するコメントを確認する 35 Q. *( アスタリスク ) を使用してビューを作成した場合 ビュー作成後に実表に追加した列はビューに反映されますか A. 反映されません * を使用してビューを作成した場合 * は実際の列名に展開されてデータ ディクショナリに登録されます ちなみに新しく追加した列をビューに反映させたい場合はビューを再作成する必要があります 36 Q. 読取り専用のビューを作成する方法 A. ビューの定義に WITH READ ONLY オプションを指定することで 読み取り専用のビューを作成することができます この読み取り専用ビューに対して DML 操作を行うとエラーとなります VIEW_EMP 表を読取り専用で作成する SQL> CREATE VIEW view_emp AS SELECT ename FROM emp WITH READ ONLY; 8

37 Q. 表内の特定列のみに UPDATE 権限を付与する方法 A. UPDATE 権限に限って 特定列に権限を付与することができます 特定列のみに UPDATE 権限を付与する場合は UPDATE 権限の後に権限を付与する列を記述します EMP 表の ENAME SAL COMM 列に対する UPDATE 権限を SCOTT ユーザーに付与する SQL> GRANT update(ename,sal,comm) ON emp TO scott; UPDATE コマンドは列単位の処理であり UPDATE コマンドの後のカッコ内に列を記述することで指定された列のみへの処理を許可します 38 Q. 同じ権限の組み合わせを一つにまとめて管理することはできますか A. ロールを使用すれば 複数の権限を一つにまとめて管理することができます ロールとは関連する権限のグループに名前をつけたもので ロールをユーザーに付与する事でロール内の権限を一括して付与することができます ロールについての詳細は データベース マネジメント コースでご紹介しています 付録 39 Q. 小数点以下の数値を表示させる方法 A. TO_CHAR 関数を使用することで小数点以下のデータを表示させることができます SQL*Plus を使用している場合は COLUMN コマンドを使うこともできます sal 列を表示する際 小数第 2 位まで表示する /* TO CHAR 関数を使った場合 */ SQL> SELECT TO_CHAR(sal,'999.99') FROM emp; /* COLUMN コマンドを使った場合 */ SQL> COLUMN sal FORMAT 999.99 40 Q. 日付データを和暦で表示することはできますか A. 初期化パラメータ NLS_CALENDAR を JAPANESE IMPERIAL に変更することで和暦で表示できます 現在のセッションで和暦を表示させる SQL> ALTER SESSION SET NLS_CALENDAR = 'JAPANESE IMPERIAL'; SQL> SELECT sysdate FROM dual; SYSDATE --------------------- 平成 21 年 08 月 06 日 初期化パラメータ NLS_CALENDAR の詳細については リファレンス マニュアルをご参照ください 9

41 Q. FLASHBACK TABLE による表の復元が行える期間について A. Oracle 10g R1 以降は PURGE オプションを使用せずにテーブルを削除した場合 その表は物理的には残っています そのため FLASHBACK TABLE 文によって復元することができます しかし 削除された表が使っている物理的な領域は 削除されていない他の表や 新規に作成される表に優先的に使用されていきます そのため 削除された表の領域が他のオブジェクトによって使用されてしまうと表の復元が行えなくなります つまり 他のオブジェクトに領域が再利用されるまでが 表の復元を行える期間となります 42 Q. DUAL 表にアクセスをするときにスキーマ名を修飾が不要な理由 A. DUAL 表にはシノニムという オブジェクトに対する別名が設定されているためです シノニムは表などのデータベースオブジェクトに設定する別名のことをいい 以下のような目的で使用します オブジェクトの名前と所有者を隠蔽化する ユーザー側の SQL 文を単純なものとし アクセスの簡素化を実現 シノニムの詳細については 概要 マニュアルをご参照ください 43 Q. 紀元前の日付情報を扱うにはどうすればよいでしょうか A. TO_DATE 関数や TO_CHAR 関数などを使用して 日付書式を指定します 紀元前の年号を負の値で表示する ( 日付書式 s を使用する ) SQL>SELECT TO_CHAR(hiredate, 'syyyy') FROM emp; 紀元前 4712 年のデータ挿入する ( 日付書式 BC AD を使用する ) BC には 紀元前 AD には 西暦 という日本語を使用します SQL>INSERT INTO tab_date(col_date) 2 VALUES(to_date(' 紀元前 47120101', 'bcyyyymmdd')); 44 Q. 日付データの曜日を英語で表示することはできますか A. 初期化パラメータ NLS_DATE_LANGUAGE を JAPANESE から ENGLISH に変更することで可能です 以下はセッションレベルでパラメータを変更した例です 現在のセッションで日付データを英語で表示させる SQL>ALTER SESSION SET NLS_DATE_LANGUAGE = 'ENGLISH'; 初期化パラメータ NLS_DATE_LANGUAGE の詳細については リファレンス マニュアルをご参照ください 10

45 Q. デフォルトの日付書式を変更することはできますか A. ALTER SESSION 文を使用して デフォルトの日付書式を変更できます デフォルトの日付書式を変更する SQL> ALTER SESSION 2 SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI'; 46 Q. 西暦の上 2 桁だけ評価できる日付書式はありますか その他 A. 西暦の上 2 桁だけを評価できる日付書式はありません 代替案としては SUBSTR 関数を使用し 評価したい 2 桁分だけを抜き出す方法が挙げられます SQL> SELECT SUBSTR(TO_CHAR(hiredate,'yyyy'),1,2) FROM emp; SUBS ---- 19 以下省略 47 Q. '( シングルコーテーション ) を文字列として認識させるにはどのように指定したら良いですか A. 文字列に挿入したいシングルコーテーションの直前にシングルコーテーションをひとつ指定することで 条件値を指定するシンボルではなく 文字データとして Oracle に認識させる事ができます /* EMP 表の ENAME 列に TOM' というデータを挿入する */ SQL> INSERT INTO emp(empno,ename) 2 VALUES(1122,'TOM'''); /* 挿入したデータを確認する */ SQL> SELECT empno,ename FROM emp 2 WHERE ename = 'TOM'''; EMPNO ENAME ---------- ---------- 1122 TOM' 48 Q. SQL*Plus コマンドの EDIT コマンドで起動するエディタを変更することはできますか A. _EDITOR 変数を設定することで 起動するエディタを変更することができます 以下のように変数に対して 使用したいエディタの EXE ファイルのパスを指定します DEFINE _EDITOR = "C:\Program Files\EmEditor\EmEditor.exe" 11

49 Q. SQL*Plus で問合せ結果を表示した際に 点線を表示させない方法 A. SQL*Plus で通常問合せを行うと 列ヘッダと行データの間に点線が表示されます この点線を表示させたくない場合は SQL*Plus のシステム変数 UNDERLINE を OFF に設定してください SQL> SET UNDERLINE OFF SQL> SELECT * FROM DEPT1; DEPTNO DNAME LOC 10 ACCOUNTING NEW YORK 50 Q. SQL*Plus で問合せ実行時に結果が何行返されたのか確認する方法 A. SQL*Plus のシステム変数 FEED を ON に設定してください また逆に結果を表示させたくない場合は OFF に設定してください SQL> SET FEED OFF SQL> SELECT ename FROM emp; ENAME ---------- SMITH 省略 MILLER SQL> 51 Q. SQL*Plus を使用した環境で 数値データが指数表示 (A (B の C 乗 )) されてしまうのはなぜですか A. SQL*Plus 側で数値を表示する列幅が実データの桁数に比べて小さいため発生する問題であるため SQL*Plus の列幅表示を拡張すると解消されます 列幅は 以下の方法で拡張します 1.COLUMN コマンド ( 特定列を調整する ) COLUMN 列名 FORMAT 書式 2.NUMFORMAT システム変数 ( 表の数値列全てを調整する ) SET NUMFORMAT 書式 3.NUMWIDTH システム変数 ( 表の数値列全てを調整する ) SET NUMWIDTH 桁数 52 Q. SQL*Plus の環境設定コマンドの値をはじめから有効にしておくことはできますか A. SQL*Plus 起動時に自動的に実行される glogin.sql ファイルを使用します この glogin.sql ファイル内に環境設定コマンドを記述しておくことで SQL*Plus 起動時に定義が有効になります ファイルの作成場所 $ORACLE_HOME/sqlplus/admin 12

53 Q. SQL*Plus で OS コマンドを実行する方法 A. HOST コマンドを使用すると SQL*Plus で OS コマンド (Windows Linux) を実行できます 54 Q. ユーザーがオブジェクトに対して最後に変更処理した日付を取得できますか A. DDL 文による変更作業は USER_OBJECTS ビューの LAST_DDL_TIME 列で確認できます DML 文における変更作業はデータ ディクショナリで管理していないため データ ディクショナリから確認を行うことはできませんが 以下の機能を使用することで可能になります 1. 監査機能を利用する Oracle の監査機能については データベース マネジメント コースでご紹介しています 2. トリガーを利用する トリガーとは表に対する処理をきっかけに 暗黙的に起動するプログラムです トリガーの詳細については PL/SQL プログラミング Ⅰ コースでご紹介しています 55 Q. SQL*Plus で & を文字データとして認識させることはできますか A. & ( 置換文字 ) のように SQL*Plus 上で特殊な意味をもつ記号を文字データとして扱うためには SQL*Plus の ESCAPE コマンドを使用することで可能です 以下に例をご紹介致します SET ESCAPE \ INSERT INTO test values('\&a'); 上記の ESCAPE コマンドはあくまで SQL*Plus のコマンドであり SQL の LIKE 演算子で使用する ESCAPE コマンドとは別のものになりますのでご注意下さい ご利用上の注意事項 本書の著作権は株式会社アシストに帰属します 本書は参考資料であり 掲載されている情報は予告なしに変更されることがあります 本書で使用している製品の名称は 各社の商標または登録商標です 本資料の内容に関するご質問はご遠慮ください 本資料はお客様の責任のもとでご利用ください これらの使用によりいかなる損害が生じたとしても 株式会社アシストは一切保証致しかねますので ご了承ください 13