Oracleではデータベースを作成すると自動的に以下の表領域が作成されます。
事前構成済の表領域
表領域 | 説明 |
SYSTEM | Oracleサーバーがデータベースを管理するために使用する表領域 |
SYSAUX | SYSTEM表領域の補助表領域 |
TEMP | データベースのデフォルトの一時表領域 |
UNDOTBS1 | UNDO表領域 |
USERS | 永続表領域
SYSやSYSTEMユーザー以外のユーザー用のデフォルト表領域 |
EXAMPLE | データベース作成時に「サンプル・スキーマの作成」を指定すると作成される表領域 |
SQLで単語の先頭1文字目のみ小文字から大文字へ変更したい場合は、INITCAP関数を使用することで可能となります。引数に変換したい文字を指定すればOKです。単語の区切りはスペースかアルファベット以外の文字(ハイフン「-」、カンマ「,」、アンダースコア「-」など)を区切り文字として見做して変換されます。
DBMS毎の使用可否
- 一般的な以下のDBMSではINITCAP関数は使用可能です。
サンプルテーブル
- 「GOODS」テーブル
INITCAP関数の使用例
SQL(クエリー)
|
SELECT INITCAP(g.NAME) FROM GOODS g; |
実行結果
- 以下のように区切り文字の単語別に先頭文字が大文字に変換されているのが確認出来ます。
Oracleデータベースを起動すると内部的に以下の段階でデータベースが使用可能な状態となります。
データベースの起動段階と状態
段階 | ステータス | 状態 |
1 | SHUTDOWN | データベースが停止している状態 |
2 | NOMOUNT | インスタンスが起動している状態
※制御ファイル、データファイル、REDOログファイルはクローズ |
3 | MOUNT | インスタンスが起動し、制御ファイルがオープンしている状態
※データファイル、REDOログファイルはクローズ |
4 | OPEN | インスタンスが起動し、制御ファイル、データファイル、REDOログ・ファイルもオープンしている状態
※一般ユーザーが使用可能な状態 |
SQLで指定した日付項目(該当年月)の月末日を取得するには「LAST_DAY」関数を使用します。うるう年でも正確な月の最終日を取得出来ます。
DBMS毎の使用可否
- SQL Serverでは「EOMONTH」関数で最終日付を取得出来ます。
関数\DBMS | MySQL | PostgreSQL | SQL Server | Oracle |
LAST_DAY | ○ | ○ | ✕ | ○ |
EOMONTH | ✕ | ✕ | ○ | ✕ |
日付(該当月)の最終日を取得する例
サンプルテーブル「BIRTHDAY」
SQL(クエリー)
- BIRTHDAYテーブルの項目「BIRTHDAY」の最終日を取得する例となります。
|
SELECT LAST_DAY(b.BIRTHDAY) FROM BIRTHDAY b |
実行結果
Oracleデータベースでは以下の制約を設定することが出来ます。
Oracle DB:制約の種類
制約 | 説明 |
NOT NULL制約 | NULL値の設定を許可しない |
UNIQE制約
(一意キー制約) | 一意の値のみ許可します。複数レコード登録時、重複する値を許可しません。NULL値は許可します。 |
CHECK制約 | 指定した条件の値のみ許可します。 |
PRIMARY KEY制約
(主キー制約) | 一意の値のみ許可し、重複する値は許可しません。NULL値も許可しません。 |
FOREIGN KEY制約
(外部キー制約) | 指定した親テーブルに存在する値のみ許可します。 |
制約のポイント
- 制約はCREATE TABLE または ALTER TABLEで設定出来ます。
- 制約設定の構文には列制約構文と表制約構文の2種類あります。
- NOT NULL制約は列制約構文でのみ設定出来ます。
制約の設定例
- 下記例のNOT NULL制約の設定箇所が列制約構文、UNIQUE制約の設定箇所が表制約構文となります。
|
CREATE TABLE "USER1"."BIRTHDAY" ( "NAME_NO" NUMBER, "NAME" VARCHAR2(50) CONSTRAINT "BIRTHDAY_NAME_NN" NOT NULL ENABLE, "BIRTHDAY" DATE, "UPDATE_DATE" TIMESTAMP (6), CONSTRAINT "BIRTHDAY_NAME_NO_U" UNIQUE ("NAME_NO") ); |
EclipseではJavaなどで一つのクラス内で同じ処理内容が複数存在している場合、一つのメソッドとして抽出(統合)することが出来ます。この機能は同じ処理内容ではなくても選択したソースコードは別のメソッドとして抽出することも可能となります。
サンプルコード
Javaソース:メソッド抽出前
- 以下の様に3~7行目と9~13行目は同じ内容なのでこちらを一つのメソッドに抽出します。
|
public static void main(String[] args) { if(enumNumberSet.contains(EnumNumber.NUMBER_1)) { System.out.println("EnumNumber.NUMBER_1は存在します。"); } else { System.out.println("EnumNumber.NUMBER_1は存在しません。"); } if(enumNumberSet.contains(EnumNumber.NUMBER_1)) { System.out.println("EnumNumber.NUMBER_1は存在します。"); } else { System.out.println("EnumNumber.NUMBER_1は存在しません。"); } } |
メソッド抽出手順
- 抽出したいソースコードを範囲選択して右クリック後、「リファクタリング」⇒「メソッドの抽出」を選択します。ショートカットキー「Alt + Shift + M」でもOKです。
- メソッドの抽出画面でメソッド名を指定して必要に応じて各チェックボックスを選択して「OK」ボタンを選択します。
Javaソース:メソッド抽出後
- 以下の様に同じ処理内容が一つのメソッドとして抽出(統合)されているのが確認出来ます。
|
public static void main(String[] args) { extracted(); extracted(); } private static void extracted() { if(enumNumberSet.contains(EnumNumber.NUMBER_1)) { System.out.println("EnumNumber.NUMBER_1は存在します。"); } else { System.out.println("EnumNumber.NUMBER_1は存在しません。"); } } |
顧客の有効住所などを管理しているテーブルからある特定の日付時点で有効な住所を取得する方法をメモしておきます。
特定の日付時点で有効な住所情報を取得するサンプル
サンプルテーブル
- 「CLIENT_ADDRESS」テーブル
以下の様に顧客ID(CLIENT_ID)毎に有効な住所を管理するテーブルです。最新の住所のEND_DATEはnullとして管理してます。
クエリー(SQL)
- ‘2022-03-31’時点で有効な住所情報を取得する例です。
|
SELECT ca.* FROM CLIENT_ADDRESS ca WHERE TRUNC(ca.START_DATE) <= '2022-03-31' AND ('2022-03-31' <= TRUNC(ca.END_DATE) OR ca.END_DATE IS NULL); |
実行結果
「駑馬十駕」 IT系情報を中心に調べた事をコツコツ綴っています。