by shigemk2

当面は技術的なことしか書かない

AL32UTF8

UTF-8、UTF8、AL32UTF8 の違いは何ですか? UTF-8 は可変幅のエンコーディングであり、7 ビット ASCII の厳密なスーパーセッ トです。UTF-8 では、1 つの Unicode 文字は 1 バイト、2 バイト、3 バイトまたは 4 バイトです。UTF8 は、Unicode 3.0 までの UTF-8 エンコーディングのみをサポー トします。AL32UTF8 は、最新の Unicode 標準で定義された補助文字をサポート する Oracle Unicode キャラクタ・セットです。

なんかわかりづらいけどUTF8がキャラクタセットで、UTF-8はキャラクタセットではない。 最新Unicodeをサポートしているので、特に理由がなかったらUTF8ではなくAL32UTF8を使うのが良い。

http://otndnld.oracle.co.jp/products/database/oracle10g/application_development/pdf/TWP_AppDev_Unicode_10gR2.pdf

OTN Japan - Oracle9i 物理設計:第1部 DB全体の設計

2018 SQL Puzzle 1

SQLパズル 第2版~プログラミングが変わる書き方/考え方

SQLパズル 第2版~プログラミングが変わる書き方/考え方

メモ。オリジナルのクエリをそのまま実行してもエラーになるのでいくつか直している

Oracle EE 12.1.0.2.v10

-- 変更点
-- INTERVAL '365' DAYは12.1ではエラー ORA-00920: invalid relational operator になる
-- INTERVALが364になることもあるので=を<=にした
-- メモ
-- CONSTRAINT 制約 (EXTRACTとあわせて)
-- start_dateはfiscal_yearより1年前
-- start_dateは10/1
-- end_dateは9/30
CREATE TABLE FiscalYearTable1
(fiscal_year INTEGER NOT NULL PRIMARY KEY,
 start_date DATE NOT NULL,
    CONSTRAINT valid_start_date
    CHECK((EXTRACT (YEAR FROM start_date) = fiscal_year - 1)
               AND (EXTRACT (MONTH FROM start_date) = 10)
               AND (EXTRACT (DAY FROM start_date) = 01)),
 end_date DATE NOT NULL,
    CONSTRAINT valid_end_date
    CHECK((EXTRACT (YEAR FROM end_date) = fiscal_year)
               AND (EXTRACT (MONTH FROM end_date) = 09)
               AND (EXTRACT (DAY FROM end_date) = 30)),
    CONSTRAINT valid_interval
    CHECK ((end_date - start_date) <= 365));

INSERT INTO FiscalYearTable1 VALUES(1995, DATE '1994-10-01', DATE '1995-09-30');
INSERT INTO FiscalYearTable1 VALUES(1997, DATE '1996-10-01', DATE '1997-09-30');
INSERT INTO FiscalYearTable1 VALUES(1998, DATE '1997-10-01', DATE '1998-09-30');

-- 終了日が8月
INSERT INTO FiscalYearTable1 VALUES(1996, DATE '1995-10-01', DATE '1996-08-30');
-- 開始日が2日
INSERT INTO FiscalYearTable1 VALUES(1999, DATE '1998-10-02', DATE '1999-09-30');

http://www.geocities.jp/mickindex/database/db_support_sqlpuzzle.html#LocalLink-p1