• 検索結果がありません。

(Microsoft PowerPoint - \221\3462\217\315 Oracle\214\335\212\267\201i\221O\224\274\201j.ppt)

N/A
N/A
Protected

Academic year: 2021

シェア "(Microsoft PowerPoint - \221\3462\217\315 Oracle\214\335\212\267\201i\221O\224\274\201j.ppt)"

Copied!
76
0
0

読み込み中.... (全文を見る)

全文

(1)

Oracle互換(前半)

本書に含まれている情報は、正式なIBMのテストを受けていません。また、明記にしろ、暗黙的にしろ、なんらの保証もなしに配布されるものです。

この情報の使用またはこれらの技術の実施は、いずれも、使用先の責任において行われるべきものであり、それらを評価し、実際に使用する環境に統合す る使用先の判断に依存しています。それぞれの項目は、ある特定の状態において正確であることがIBMによって調べられていますが、他のところで同じまた は同様の結果が得られる保証はありません。これらの技術を自身の環境に適用することを試みる使用先は、自己の責任において行う必要があります。 © Copyright IBM Japan Systems Engineering Co., Ltd. 2009

<第1.00版 2009年 7月>

(2)

• Oracle互換機能強化概要

互換機能強化概要

互換機能強化概要

互換機能強化概要

• DB2_COMPATIBILITY_VECTOR

• データタイプ

データタイプ

データタイプ

データタイプの

の互換性

互換性

互換性

互換性

• スカラー

スカラー

スカラー

スカラー関数

関数

関数の

関数

の機能強化

機能強化

機能強化

機能強化

• ビルトイン

ビルトイン

ビルトイン

ビルトイン・

・・

・パッケージ

パッケージ

パッケージ

パッケージ・

・・

・ライブラリー

ライブラリー

ライブラリー

ライブラリー

• PL/SQLサポート

サポート

サポート

サポート

• パッケージ

パッケージ

パッケージ

パッケージ(

((

(モジュール

モジュール)

モジュール

モジュール

))

)の

のサポート

サポート

サポート

サポート

• 参考資料

参考資料

参考資料

参考資料

内容

(3)

Oracle互換機能強化概要

Oracle互換機能強化概要

(4)

Oracle互換機能の強化により移行が容易に

Oracle

Database

DB2

Database

Your Applications

Oracle SQL・

・・

・データ

データ

データ

データ型

PL/SQL

ビルトイン

ビルトイン

ビルトイン

ビルトイン関数

関数

関数

関数

ビルトイン

ビルトイン

ビルトイン

ビルトイン・

・・

・パッケージ

パッケージ

パッケージ

パッケージ

Concurrency Control

SQL*Plus Scripts

ほとんどそのまま

ほとんどそのまま

ほとんどそのまま

ほとんどそのまま

理解

理解

理解

理解できる

できる

できる

できる。

ほとんどそのまま

ほとんどそのまま

ほとんどそのまま

ほとんどそのまま動

動く

Oracle固有の機能や動作

(5)

Oracle互換機能概要

データタイプ

NUMBER、VARCHAR2、TIMESTAMP(n)、“DATE”

BOOLEAN、INDEX BY、VARRAY、ROW TYPE、Ref Cursor

ビルトイン関数

形式・型変換関連 (TO_CHAR, TO_DATE, TO_TIMESTAMP, TO_NUMBER, TO_CLOB)

日付操作関連(EXTRACT, ADD_MONTHS, …)

文字列操作関連(INITCAP, RPAD, LPAD, INSTR, REVERSE・・・)

その他(DECODE, NVL, LEAST, GREATEST, BITAND)

ビルトイン・パッケージ・ライブラリー

DBMS_OUTPUT、UTL_FILE、DBMS_ALERT、DBMS_PIPE、DBMS_JOB、DBMS_LOB、DBMS_SQL、・・・

フィーチャー

CONNECT BY句を使用した階層照会

外部結合演算子 (+)-join

DUAL表

ROWNUM擬似列

TRUNCATE TABLEステートメント

Public synonym

作成済み一時表

NEXTVAL/CURRVAL(シーケンスの呼び出し方法)

MINUS(集合演算子 EXCEPTのAlias)

(6)

PL/SQLサポート概要

PL/SQLの機能

All logic

EXCEPTION

User Defined Exceptions

Constant variables

FOR over range

over SELECT

over cursor

%TYPE

%ROWTYPE

BULK COLLECT/FETCH

FORALL

Autonomous transaction

PL/SQLの記述場所

Anonymous block

Scalar function

Procedure

Package

Trigger

パッケージオブジェクトのサポート

CREATE PACKAGE

CREATE PACKAGE BODY

Replace package body

PKG [BODY]

VARIABLE

CURSOR

TYPE

EXCEPTION

(7)

DB2_COMPATIBILITY_VECTOR

DB2_COMPATIBILITY_VECTOR

(8)

DB2_COMPATIBILITY_VECTOR レジストリ変数

• Oracleとの互換機能を有効にするレジストリ変数

Oracle互換機能の中にはこのレジストリ変数の設定が必要なものがあります。

• 設定方法

12ビットのビットでそれぞれの機能をON、OFFを決定します。このビットの16進

値を設定します。

それぞれのビットに割り当てられている機能は次ページを参照

全ての互換機能を有効にするにはFFF( =0x01+0x02+・・・+0x400+0x800)を指定

DB2_COMPATIBILITY_VECTOR=ORAの設定も可能

この設定はFFFと同じように全ての互換フィーチャーを有効にします。

この設定はOracle との最大の互換性を実現する設定であり、Oracle互換機能を

使用する際の推奨値となります。

またこの設定により、DB2_DEFERRED_PREPARE_SEMANTICS=YESの設

定も暗黙的に有効になります。

DB2_DEFERRED_PREPARE_SEMANTICS=YESは、Unicode,SBCS環境でのみの

推奨値となります。

Unicode,SBCS環境

・DB2_COMPATIBILITY_VECTOR=ORA

・DB2_DEFERRED_PREPARE_SEMANTICS=YES

それ以外の環境

・DB2_COMPATIBILITY_VECTOR=ORA

・DB2_DEFERRED_PREPARE_SEMANTICS=NO

以上により、こちらが

それぞれの環境での推奨値

暗黙的に設定されま

すが明示指定される

ことをお勧めします

(9)

DB2_COMPATIBILITY_VECTORで設定可能なフィーチャー

PL/SQL ステートメントおよび言語要素のコンパイルと実行を可能にします。

PL/SQL のコンパイル

12 (0x800)

データ・ディクショナリー互換ビューの作成を可能にします。

データ・ディクショナリー互換ビュー

11 (0x400)

配列で first、last、next、previous などの演算を実行するメソッドの使用を可能にしま

す。また、配列内の特定の要素の参照に、大括弧の代わりに括弧を使用できるよう

にします。例えば、array1(i) は array1 の要素 i を参照します。

コレクション・メソッド

10 (0x200)

バイト長が 254 以下である文字定数および GRAPHIC ストリング定数に、CHAR デー

タ・タイプまたは GRAPHIC データ・タイプ (VARCHAR データ・タイプでも

VARGRAPHIC データ・タイプでもない) を割り当てることを可能にします。

文字リテラル

9 (0x100)

TRUNCATE ステートメント用の代替セマンティクスを有効にします。IMMEDIATE がオ

プションのキーワードであり、指定がない場合にデフォルトになります。TRUNCATE

ステートメントが論理作業単位内の最初のステートメントではない場合、TRUNCATE

ステートメントが実行される前に暗黙的なコミット操作が実行されます。

TRUNCATE TABLE

8 (0x80)

DATE データ・タイプを日付と時間の値を結合した TIMESTAMP(0) として使用するこ

とを可能にします。

DATE データ・タイプ

7 (0x40)

VARCHAR2 データ・タイプおよび関連する文字ストリング処理を有効にします。

VARCHAR2 データ・タイプ

6 (0x20)

NUMBER データ・タイプおよび関連する数値処理を有効にします。

NUMBER データ・タイプ

5 (0x10)

CONNECT BY 節を使用した階層照会のサポートを有効にします。

階層照会

4 (0x08)

外部結合演算子 (+) のサポートを有効にします。

外部結合演算子

3 (0x04)

未使用

未使用

2 (0x02)

ROWNUM を ROW_NUMBER() OVER() の同義語として使用することを可能にし、

ROWNUM を SQL ステートメントの WHERE 節に含めることを許可します。

ROWNUM

1 (0x01)

説明

互換性フィーチャー

ビット位置

(10)

DB2_COMPATIBILITY_VECTORの設定

• DB2_COMPATIBILITY_VECTOR、DB2_DEFERRED_PREPARE_SEMANTICSを

設定後、インスタンスの再起動をして設定を有効にします。

以下の機能は、データベース作成時にDB2_COMPATIBILITY_VECTORを設定し

ておかなければ、機能を有効に出来ません。

VARCHAR,NUMBER,DATEのデータタイプの互換性

データディクショナリー互換ビュー

C:¥work>db2set DB2_COMPATIBILITY_VECTOR=ORA

C:¥work>db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES

C:¥work>db2stop force

2009-06-30 09:29:08 0 0 SQL1064N DB2STOP の処理が正常に終了しました。

SQL1064N DB2STOP の処理が正常に終了しました。

C:¥work>db2start

2009-06-30 09:29:13 0 0 SQL1063N DB2START の処理が正常に終了しました。

SQL1063N DB2START の処理が正常に終了しました。

C:¥work>db2set

DB2_DEFERRED_PREPARE_SEMANTICS=YES

DB2_COMPATIBILITY_VECTOR=ORA

DB2INSTOWNER=・・・

・・・

DB2_COMPATIBILITY_VECTOR設定例

(11)

データタイプの互換性

データタイプの互換性

(12)

データタイプの互換性

• NUMBER,VARCHAR2,DATEの

の互換性

互換性

互換性

互換性

Oracleからの移行時のデータタイプのマッピングやDDLの変更を最小限できる

Oracleがサポートしている以下のデータタイプとの互換性をサポート

DATE

NUMBER

VARCHAR2

データタイプの

データタイプ

データタイプ

データタイプ

の互換性

互換性

互換性を

互換性

を有効

有効

有効にするには

有効

にするには、

にするには

にするには

、DB2_COMPATIBILITY_VECTORの

の設定

設定

設定が

設定

が必要

必要

必要

必要

データベース作成時に設定が行われている必要がある、データベース作成後は変更不可

以下のデータベース構成パラメーターの以下の項目で互換性サポートを有効化を確認できる

NUMBER データ・タイプの互換性

VARCHAR2 データ・タイプの互換性

データ・タイプ DATE の TIMESTAMP(0) への互換性

C:¥>db2 get db cfg for sample | find "互換性"

NUMBER データ・タイプの互換性

= ON

VARCHAR2 データ・タイプの互換性

= ON

データ・タイプ DATE の TIMESTAMP(0) への互換性

= ON

(13)

DATEデータタイプの互換性

• 「

「「

「データ

データ

データ

データ・

・・

・タイプ

タイプ

タイプ DATE の

タイプ

の TIMESTAMP(0) への

への

への

への互換性

互換性

互換性

互換性」

」」

」が

がON

DATEタイプがTIMESTAMP(0)として扱われる

OracleのDATEとの互換

OracleのDATEは、秒までの精度を持つ

create table tab1(c1 date)

DB20000I SQL コマンドが正常に完了しました。

describe table tab1

データ・タイ データ・ 列の スケ

列名 プ・スキーマ タイプ名 長さ ール NULL

- --- - ---- --- ---C1 SYSIBM DATE 4 0 はい

1 レコードが選択されました。

insert into tab1 values current date

DB20000I SQL コマンドが正常に完了しました。

select * from tab1

C1

---2009-04-22

1 レコードが選択されました。

create table tab1(c1 date)

DB20000I SQL コマンドが正常に完了しました。

describe table tab1

データ・タイ データ・ 列の スケ

列名 プ・スキーマ タイプ名 長さ ール NULL

--- --- - ---- --- ---C1 SYSIBM TIMESTAMP 7 0 はい

1 レコードが選択されました。

insert into tab1 values current date

DB20000I SQL コマンドが正常に完了しました。

select * from tab1

C1

---2009-04-22-13.39.31

1 レコードが選択されました。

データ・タイプ DATE の TIMESTAMP(0) への互換性=OFF データ・タイプ DATE の TIMESTAMP(0) への互換性=ON

Date型でテーブルを作成すると Timestamp(0)として定義される

(14)

参考)TIMESTAMPの精度指定

TIMESTAMPの

の精度

精度

精度

精度の

の指定

指定

指定

指定が

が可能

可能

可能

可能

互換機能(DB2_COMPATIBILITY_VECTOR)に関係なくV9.7から使用可能

小数点以下の秒数の精度を指定

0から12までを指定可能(デフォルト:6)

OracleのTimestamp型との互換 ← OracleのTimestampでも精度指定可能(指定可能な桁数 0-9)

より高い精度を持つTIMESTAMP型の使用

低い精度を指定することでスペースの節約

create table tab1(

c0 timestamp(0),c1 timestamp(1),c2 timestamp(2), c3 timestamp(3),c4 timestamp(4),c5 timestamp(5), c6 timestamp(6),c7 timestamp(7),c8 timestamp(8), c9 timestamp(9),c10 timestamp(10),c11 timestamp(11), c12 timestamp(12),c13 timestamp )

DB20000I SQL コマンドが正常に完了しました。 describe table tab1

データ・タイ データ・ 列の スケ 列名 プ・スキーマ タイプ名 長さ ール NULL -- --- - ---- --- ---C0 SYSIBM TIMESTAMP 7 0 はい C1 SYSIBM TIMESTAMP 8 1 はい C2 SYSIBM TIMESTAMP 8 2 はい C3 SYSIBM TIMESTAMP 9 3 はい C4 SYSIBM TIMESTAMP 9 4 はい C5 SYSIBM TIMESTAMP 10 5 はい C6 SYSIBM TIMESTAMP 10 6 はい C7 SYSIBM TIMESTAMP 11 7 はい C8 SYSIBM TIMESTAMP 11 8 はい C9 SYSIBM TIMESTAMP 12 9 はい C10 SYSIBM TIMESTAMP 12 10 はい C11 SYSIBM TIMESTAMP 13 11 はい C12 SYSIBM TIMESTAMP 13 12 はい C13 SYSIBM TIMESTAMP 10 6 はい

values current timestamp 1

---2009-04-22-18.53.07.156000

1 レコードが選択されました。

values current timestamp(0) 1

---2009-04-22-18.53.07

1 レコードが選択されました。

values current timestamp(12) 1 ---2009-04-22-18.53.07.171000000000 精度の指定により列の長さ が変わる 精度を短くとることでスペー スの節約が可能 CURRENT TIMESTAMP特殊 レジスターも精度指 定可能

(15)

NUMBER データ・タイプの互換性

• 「

「NUMBERデータ

「「

データ

データ

データ・

・・

・タイプ

タイプ

タイプ

タイプの

の互換性

互換性

互換性

互換性」

」」

」が

がON

表定義時の列タイプやプロシージャー内の変数タイプなどでNUMBER型を使用する

ことが出来る

実際には以下のような型として作成される

NUMBER -> DECFLOAT(16)

NUMBER(p)->DECIMAL(p)

NUMBER(p,s)->DECIMAL(p,s)

精度(p)は31まで

create table tab1(c1 number

number

number

number,c2 number

number

number

number(10),c3 number

number

number

number(10,5))

DB20000I SQL コマンドが正常に完了しました。

describe table tab1

データ・タイ データ・

列の

スケ

列名

プ・スキーマ タイプ名

長さ

ール

NULL

--- --- - ---- ---

---C1 SYSIBM DECFLOAT 8 0 はい

C2 SYSIBM DECIMAL 10 0 はい

C3 SYSIBM DECIMAL 10 5 はい

3 レコードが選択されました。

NUMBERデータ

データ

データ

データ・

・・

・タイプ

タイプ

タイプ

タイプの

互換性

互換性

互換性

互換性=

=ON

精度を付けないNUMBER型でテーブルを作成すると

DECFLOAT(16)型として定義されます。

精度、位取りを付けたNUMBER型はDECIMALとして

定義されます。

DDLでNUMBERを使用することが出来ます。

(16)

VARCHAR2 データ・タイプの互換性

• 「

「VARCHAR2データ

「「

データ

データ・

データ

・・

・タイプ

タイプ

タイプ

タイプの

の互換性

互換性

互換性

互換性」

」」

」が

がON

表定義時の列タイプやプロシージャー内の変数タイプなどでVARCHAR2型を使用

することが出来る

実際には、VARCHARとして作成される

空文字('')がNULLとして扱われる

VARCHARの比較には非空白埋め比較セマンティクスが使用される

長さが最大 254 バイトまでの文字ストリング・リテラルのデータ・タイプは CHARになり、

254以上はVARCHARになる

create table tab1(c1 varchar2

varchar2

varchar2(10),c2 varchar2

varchar2

varchar2

varchar2(10) for bit data)

varchar2

DB20000I SQL コマンドが正常に完了しました。

describe table tab1

データ・タイ データ・

列の

スケ

列名

プ・スキーマ タイプ名

長さ

ール

NULL

--- --- - ---- ---

---C1 SYSIBM VARCHAR 10 0 はい

C2 SYSIBM VARCHAR 10 0 はい

2 レコードが選択されました。

Varchar2型でテーブルを作成す

るとVarcharとして定義される

VARCHAR2データ

データ

データ

データ・

・・

・タイプ

タイプ

タイプ

タイプの

互換性

互換性

互換性

互換性=ON

DDLでVARCHAR2が使用できる

(17)

VARCHAR2 データ・タイプの互換性 ON/OFFの違い

空文字

空文字

空文字

空文字(

((

(''))))の

の扱

扱い

いとVARCHARの

の末尾

末尾

末尾

末尾ブランク

ブランクの

ブランク

ブランク

の比較

比較

比較の違いについて確認

比較

C:¥work¥asnclp>db2 -tvf varchar2test.sql

create table tab1(c1 varchar(10))

DB20000I SQL コマンドが正常に完了しました。

insert into tab1 values (null),(''),('a'),('a ')

DB20000I SQL コマンドが正常に完了しました。

select c1,hex(c1) from tab1

C1 2

---

---

-a 61

a 6120

4 レコードが選択されました。

select c1,hex(c1) from tab1 where c1 = 'a'

C1 2

---

---a 61

a 6120

2 レコードが選択されました。

C:¥work¥asnclp>db2 -tvf varchar2test.sql

create table tab1(c1 varchar(10))

DB20000I SQL コマンドが正常に完了しました。

insert into tab1 values (null),(''),('a'),('a ')

DB20000I SQL コマンドが正常に完了しました。

select c1,hex(c1) from tab1

C1 2

---

---

--

-a 61

a 6120

4 レコードが選択されました。

select c1,hex(c1) from tab1 where c1 = 'a'

C1 2

---

---a 61

1 レコードが選択されました。

VARCHAR2 データ・タイプの互換性=OFF

VARCHAR2 データ・タイプの互換性=ON

空文字(’’)

OFF:0バイトの文字

ON:NULL

VARHCHARの比較

OFF:末尾ブランクは無視される

ON:末尾ブランクも含めて比較

(18)

参考)非空白埋め比較セマンティクスと空白埋め比較セマンティクス

• 非空白埋

非空白埋

非空白埋

非空白埋め

め比較

比較

比較

比較セマンティクス

セマンティクス

セマンティクス

セマンティクス

以下の文字は異なるものとみなす

'A'、'A_'、'A__' ('_'は空白文字)

• 空白埋

空白埋

空白埋

空白埋め

め比較

比較

比較セマンティクス

比較

セマンティクス

セマンティクス

セマンティクス

空白文字をパティングして比較する

末尾の空白文字の違いは無視される

以下の文字は同じものとみなす

'A'、'A_'、'A__' ('_'は空白文字)

OracleのVARCHARの比較

はこちらが使用される

VARCHAR2 データ・タイプの

互換性=OFFの時のDB2の

VARCHARの比較はこちらが

使用される

VARCHAR2 データ・タイプの

互換性=ONの時のDB2の

VARCHARの比較はこちらが

使用される

(19)

スカラー関数の機能強化

スカラー関数の機能強化

(20)

スカラー関数の機能強化

• Oracleの

のスカラー

スカラー

スカラー

スカラー関数

関数

関数

関数と

と同

同じ

じ名前

名前

名前

名前で

で同

同じ

じ動作

動作

動作

動作をする

をする関数

をする

をする

関数

関数

関数の

の追加

追加

追加

追加

Oracleからの移行の際に、これらの関数によりSQLの書き換えが必要なく

なる(Oracleの全関数をサポートしていないため注意)

• 以下

以下

以下

以下のような

のような

のような

のような関数

関数

関数を

関数

を新規

新規で

新規

新規

でサポート

サポート

サポート

サポートまたは

または

または

または機能拡張

機能拡張

機能拡張

機能拡張

形式・型変換関連

TO_CHAR, TO_DATE, TO_TIMESTAMP, TO_NUMBER, TO_CLOB

日付操作関連

EXTRACT, ADD_MONTHS, …

文字列操作関連

INITCAP, RPAD, LPAD, INSTR, REVERSE・・・

その他

(21)

形式・型変換関連のスカラー関数の使用例

• 関数

関数

関数

関数

フォーマットストリングを使用し、フォーマットの変換を行いながら型変換を行える

TO_NUMBER(数値型への変換)

TO_CHAR(文字型への変換)

TO_DATE(日付型への変換)

TO_TIMESTAMP(タイムスタンプへの変換)

キャストとの違い

フォーマットの変換を行いながら型変換を行う

'$123,456,789' (文字)→ 123456789(数値)

123456789 (数値)→ '$123,456,789' (文字)

'09/05/20' (文字)→ 2009-05-20-00.00.00(タイムスタンプ)

2009-05-20-00.37.24.843000(タイムスタンプ) → '09/05/20' (文字)

C:¥>db2 values to_number('$123,456,789','$999,999,999')

1

---123456789

1 レコードが選択されました。

C:¥>db2 values to_char(123456789,'$999,999,999')

1

---$ 123,456,789

1 レコードが選択されました。

数値型に変換

TO_NUMBER使用例

TO_CHAR使用例

文字型に変換

(22)

ビルトイン・パッケージ・ライブラリー

(ビルトイン・モジュール)

ビルトイン・パッケージ・ライブラリー

(ビルトイン・モジュール)

(23)

ビルトイン・パッケージ・ライブラリー(ビルトイン・モジュール)

• V9.7では

ではアプリケーション

では

では

アプリケーション

アプリケーション

アプリケーション開発

開発

開発に

開発

に役立

役立

役立

役立つ

つビルトイン

ビルトイン

ビルトイン

ビルトイン・

・・

・パッケージ

パッケージ

パッケージ・

パッケージ

・・

・ライブラ

ライブラ

ライブラ

ライブラ

リー

リー

リー

リーを

を多数提供

多数提供

多数提供

多数提供

パッケージ(モジュール)は、関数やプロシージャーや変数などをまとめ

たオブジェクトでSQLから呼び出すことが可能です。(PL/SQLやSQL

PLからも呼び出すことも可能)

SQLのみでは出来ないような処理(例:ファイル操作、メッセージの出力

など)を行うことができます。

• Oracleと

と同

同じ

じ名前

名前で

名前

名前

で同

同じ

じ機能

機能を

機能

機能

を持

持つ

つビルトイン

ビルトイン・

ビルトイン

ビルトイン

・・

・パッケージ

パッケージ

パッケージ・

パッケージ

・・

・ライブラリー

ライブラリー

ライブラリー

ライブラリー

を提供

提供

提供

提供

OracleのPL/SQLの開発では、ビルトイン・パッケージ・ライブラリーが

頻繁に利用されます。

OracleのPL/SQLの移行の際に、使用されているビルトイン・パッケー

ジ・ライブラリーがDB2 V9.7でも提供されていれば書き直しなしでの移

行も可能です。

(24)

ビルトイン・パッケージ・ライブラリー(ビルトイン・モジュール)

説明

説明

説明

説明

モジュール

モジュール

モジュール

モジュール名

UTL_SMTP モジュールは、SMTP (Simple Mail Transfer Protocol) を介して E メールを送信する機能を提供しま

す。

UTL_SMTP

UTL_MAIL モジュールは、E メールを送信する機能を提供します。

UTL_MAIL

UTL_FILE モジュールは、データベース・サーバーのファイル・システム上のファイルとの間で読み取りおよび書き

込みを行うための一連のルーチンを提供します。

UTL_FILE

UTL_DIR モジュールは、UTL_FILE モジュールで使用するディレクトリー別名を維持するための一連のルーチン

を提供します。

UTL_DIR

DBMS_UTILITY モジュールは、さまざまなユーティリティー・プログラムを提供します。

DBMS_UTILITY

DBMS_SQL モジュールは、動的 SQL を実行するための一連のプロシージャーを提供します。したがって、さまざ

まなデータ操作言語 (DML) ステートメントやデータ定義言語 (DDL) ステートメントをサポートします。

DBMS_SQL

DBMS_PIPE モジュールは、同じデータベースに接続されたセッション内またはセッション間のパイプを通して、

メッセージを送信するための一連のルーチンを提供します。

DBMS_PIPE

DBMS_OUTPUT モジュールは、メッセージ・バッファーにメッセージを書き込み (複数行のテキスト)、メッセージ・

バッファーからメッセージを取得する一連のプロシージャーを提供します。これらのプロシージャーは、メッセージ

を標準出力に書き込む必要のあるアプリケーション・デバッグの際に役立ちます。

DBMS_OUTPUT

DBMS_LOB モジュールは、ラージ・オブジェクトを操作する機能を提供します。

DBMS_LOB

DBMS_JOB モジュールは、ジョブの作成、スケジューリング、および管理のためのプロシージャーを提供します。

DBMS_JOB

DBMS_ALERT モジュールは、アラートの登録、アラートの送受信を行うための一連のプロシージャーを備えてい

ます。

DBMS_ALERT

(25)

DBMS_OUTPUT使用例

• DBMS_OUTPUTパッケージ

パッケージ

パッケージ

パッケージ(

((

(モジュール

モジュール

モジュール)

モジュール

))

メッセージバッファーへの書き込み、読み込み行うためのプロシジャー、関数を提供

処理結果の出力、デバッグなどで役立ちます。

C:¥work>db2 -td@ -vf dbms_output_test.sql

drop procedure proc1

DB20000I SQL コマンドが正常に完了しました。

CREATE PROCEDURE proc1( P1 VARCHAR(10) )

BEGIN

CALL DBMS_OUTPUT.PUT

DBMS_OUTPUT.PUT

DBMS_OUTPUT.PUT( 'P1 = ' );

DBMS_OUTPUT.PUT

CALL DBMS_OUTPUT.PUT_LINE

DBMS_OUTPUT.PUT_LINE

DBMS_OUTPUT.PUT_LINE( P1 );

DBMS_OUTPUT.PUT_LINE

END

DB20000I SQL コマンドが正常に完了しました。

SET SERVEROUTPUT ON

SET SERVEROUTPUT ON

SET SERVEROUTPUT ON

SET SERVEROUTPUT ON

DB20000I SET SERVEROUTPUT コマンドが正常に完了しました。

CALL proc1( '10' )

リターン状況 = 0

P1 = 10

CLPでメッセージバッファーを

読み出すための設定

メッセージ・バッファーから読

み出されたデータ

DBMS_OUTPUTパッケージのPUTプロ

シージャー、PUT_LINEプロシージャーを

呼び出して、メッセージ・バッファーへの書

き込みを行います。

(26)

UTL_DIR、UTL_FILE使用例

call utl_dir.create_directory

utl_dir.create_directory

utl_dir.create_directory

utl_dir.create_directory('mydir','C:¥work')

リターン状況 = 0

call utl_dir.get_directory_path

utl_dir.get_directory_path

utl_dir.get_directory_path

utl_dir.get_directory_path('mydir',?)

出力パラメーターの値

---パラメーター名: PATH

パラメーター値: C:¥work

リターン状況 = 0

• UTL_DIRパッケージ

パッケージ

パッケージ

パッケージ

ディレクトリを管理するためのプ

ロシージャーや関数を提供

• UTL_FILEパッケージ

パッケージ

パッケージ

パッケージ

ファイルの読み取りや書き込みを

行うプロシージャーや関数を提供

begin

declare v_filehandle

utl_file.file_type

utl_file.file_type

utl_file.file_type

utl_file.file_type;

declare isopen

boolean;

declare row varchar(4000);

set v_filehandle = utl_file.fopen

utl_file.fopen

utl_file.fopen

utl_file.fopen('mydir','myfile.csv','w');

set isopen = utl_file.is_open

utl_file.is_open

utl_file.is_open

utl_file.is_open( v_filehandle );

if isopen != true then

return ;

end if;

for cur as (select deptno,deptname,mgrno from department)

do

set row = cur.deptno||','||cur.deptname||','||cur.mgrno;

call utl_file.put_line

utl_file.put_line

utl_file.put_line

utl_file.put_line(v_filehandle,row);

end for;

call utl_file.fclose

utl_file.fclose

utl_file.fclose

utl_file.fclose(v_filehandle);

end

DB20000I SQL コマンドが正常に完了しました。

!type myfile.csv

A00,SPIFFY COMPUTER SERVICE DIV.,000010

B01,PLANNING,000020

C01,INFORMATION CENTER,000030

D11,MANUFACTURING SYSTEMS,000060

・・・省略・・・

UTL_DIRを使用してディレクトリの準備

UTL_FILEを使用してファイルに出力

CSV形式で

ファイル出力

(27)

PL/SQLサポート

PL/SQLサポート

(28)

PL/SQLとは

• SQLの手続き型拡張機能としてOracle社が提供するプログラミング言語

Oracle向けに独自に開発されているため、SQLのように標準仕様にのっとったものではない。

• Oracle Database の内部でSQLとの緊密な連携を行うことで業務処理を効率的に実行する。

• 反復処理や分岐といった制御構造を使って複雑な処理を行うことができる。

なぜPL/SQLが必要?

• SQLはデータの集合を操作するための言語であるが、実際の業務処理(ビジネス・ロジック)では手続き型の処理が必要な場 合もある。

Oracleでの

PL/SQL実行例

制御文とSQLで

構成される

(29)

PL/SQLが記述される場所

• PL/SQLブロック(Anonymous Block)

データベース外部に保持

• PL/SQLストアード・プログラム

(データベースのオブジェクトとしてデータベース内にロジックを格納)

プロシージャー

ファンクション

パッケージ

トリガー

declare ・・・ begin ・・・ end create procedure xx is ・・・ begin ・・・

end create function xxxreturn varchar2 is ・・・ begin ・・・ end; create trigger xxx before insert ・・・ on ・・・

for each row declare ・・・ begin ・・・ end;

プロシージャー

ファンクション

トリガー

PL/SQLブロック

実行

(30)

DB2 9.7でのPL/SQLサポート

• DB2 9.7では新たにPL/SQLをサポート

V9.5まではSQL PLのみ

DB2 Server

PL/SQL

Compiler

SQL PL

Compiler

SURE

(SQL Unified Runtime Engine)

Data base

Editor

DB2 9.7では

PL/SQL用とSQL PL用の2つの

コンパイラを持つ

それぞれのコンパイラから作成

されたモジュールは同じランタイム

で稼動する

New

(31)

DB2 9.7でPL/SQLを実行

カーソルを使って、DEPT

表から結果を読み取る。

前のページと全く同一

PL/SQLスクリプトを実施

PL/SQLユニークな文法

がDB2で利用できる。

(32)

DB2とOracleのPL/SQL実行比較

• CLPPlusと

とSQL*Plusで

で同

同じ

じPL/SQLブロック

ブロック

ブロック

ブロックを

を実行

実行

実行

実行

Oracle Database 11g Enterprise Edition Release

11.1.0.6.0 - Production

With the Partitioning, OLAP, Data Mining and Real

Application Testing options

に接続されました。

SQL> set serveroutput on

SQL> DECLARE

2 str VARCHAR2(30);

3 BEGIN

4 str := 'HELLO WORLD';

5 DBMS_OUTPUT.PUT_LINE(str);

6 END;

7 /

HELLO WORLD

PL/SQLプロシージャが正常に完了しました。

SQL>

CLPPlus: バージョン 1.0

Copyright (c) 2009, IBM CORPORATION. All

rights reserved.

SQL> set serveroutput on

SQL> DECLARE

2 str VARCHAR2(30);

3 BEGIN

4 str := 'HELLO WORLD';

5 DBMS_OUTPUT.PUT_LINE(str);

6 END;

7 /

HELLO WORLD

DB250000I: コマンドは正常に完了しました。

SQL>

CLPPlusからDB2に対して実行

SQL*PlusからOracleに対して実行

(33)

PL/SQLを実行するには?

• DB2_COMPATIBILITY_VECTOR (レジストリ変数)

PL/SQLコンパイラを使用可能にするかを指定

PL/SQLを実行するためには設定は必須

• SET SQLCOMPAT PLSQL(CLPオプション)

CLPにPL/SQLの区切り文字(/)を認識させるオプション

(34)

DB2_COMPATIBILITY_VECTOR=800の設定

• DB2_COMPATIBILITY_VECTOR=800を

を設定

設定

設定

設定することで

することでPL/SQLを

することで

することで

を処理

処理

処理できるようにな

処理

できるようにな

できるようにな

できるようにな

C:¥work>db2 -tvf plsqltest2.sql

!db2set |findstr DB2_COMPATIBILITY_VECTOR set sqlcompat plsql

DB20000I SET SQLCOMPAT コマンドが正常に完了しました。 set serveroutput on

DB20000I SET SERVEROUTPUT コマンドが正常に完了しました。 declare v1 varchar(100) := 'PL/SQL Test'; begin dbms_output.put_line(v1); end; DB21034E コマンドが、有効なコマンド行プロセッサー・コマン ドでないため、 SQLステートメントとして処理されました。 SQL 処理中に、そのコマンドが返されました。 SQL0104N "BEGIN-OF-STATEMENT" に続いて予期しないトークン "declare v1 varchar"が見つかりました。予期されたトークン に "<values>"が含まれている可能性があります。 LINE NUMBER=2. SQLSTATE=42601 C:¥work>db2 -tvf plsqltest2.sql

!db2set |findstr DB2_COMPATIBILITY_VECTOR

DB2_COMPATIBILITY_VECTOR=800 DB2_COMPATIBILITY_VECTOR=800 DB2_COMPATIBILITY_VECTOR=800 DB2_COMPATIBILITY_VECTOR=800

set sqlcompat plsql

DB20000I SET SQLCOMPAT コマンドが正常に完了しました。 set serveroutput on

DB20000I SET SERVEROUTPUT コマンドが正常に完了しました。 declare v1 varchar(100) := 'PL/SQL Test'; begin dbms_output.put_line(v1); end; DB20000I SQL コマンドが正常に完了しました。 PL/SQL Test

DB2_COMPATIBILITY_VECTOR=800を

を設定

設定

設定

設定

DB2_COMPATIBILITY_VECTOR=800設定

設定

設定

設定あり

あり

あり

あり

DB2_COMPATIBILITY_VECTOR=800設定

設定

設定

設定なし

なし

なし

なし

C:¥>db2set DB2_COMPATIBILITY_VECTOR=800 C:¥>db2stop force 2009-05-12 12:37:25 0 0 SQL1064N DB2STOP の処理が正常に終了 しました。 SQL1064N DB2STOP の処理が正常に終了しました。 C:¥>db2start 2009-05-12 12:37:31 0 0 SQL1063N DB2START の処理が正常に終 了しました。 SQL1063N DB2START の処理が正常に終了しました。

PL/SQLブロック

ブロック

ブロックが

ブロック

正常

正常

正常

正常に

に処理

処理

処理

処理される

される

される

される

PL/SQLブロック

ブロック

ブロック

ブロックの

処理

処理

処理

処理に

に失敗

失敗

失敗

失敗

(35)

SET SQLCOMPAT PLSQL(

((

(CLPオプション

オプション

オプション

オプション)

))

• CLPからPL/SQLを実行するためのオプション

• SET SQLCOMPAT PLSQLを設定することで“/”をPL/SQLブロックの終わりと認識する

PL/SQLでは、“;”はステートメントの区切り。ブロック単位で実行させるために、ブロックの最

後を”/”で認識

• セッションの終わりまで有効

• SET SQLCONMPAT DB2 で元に戻す

(36)

PL/SQLサポート制約事項

• 以下

以下

以下

以下の

の製品

製品エディション

製品

製品

エディション

エディション

エディションでは

では

では

では、

、PL/SQL ステートメント

ステートメントの

ステートメント

ステートメント

のコンパイル

コンパイル

コンパイル

コンパイルおよび

および

および

および実行

実行は

実行

実行

はサポート

サポート

サポート

サポートされ

され

され

され

ません

ません

ません

ません。

DB2 Express

DB2 Express-C

DB2 Personal Edition

• パーティション

パーティション・

パーティション

パーティション

・・

・データベース

データベース

データベース

データベース環境

環境では

環境

環境

では

では、

では

、PL/SQL 関数

関数および

関数

関数

および

およびトリガー

および

トリガー

トリガー

トリガーは

は作成

作成できません

作成

作成

できません

できません

できません。

• データベース

データベース

データベース

データベースが

が Unicode データベース

データベース

データベース

データベースとして

として

として

として定義

定義されていない

定義

定義

されていない

されていない

されていない場合

場合

場合

場合、

、PL/SQL ステートメン

ステートメン

ステートメン

ステートメン

トおよび

および PL/SQL コンテキスト

および

および

コンテキスト

コンテキストにおいて

コンテキスト

において

において、

において

、NCLOB データ

データ

データ・

データ

・・

・タイプ

タイプの

タイプ

タイプ

の使用

使用

使用

使用は

はサポート

サポート

サポート

サポートされませ

されませ

されませ

されませ

ん。

。 Unicode データベース

データベース

データベースでは

データベース

では

では

では、

、NCLOB データ

データ

データ

データ・

・タイプ

・・

タイプ

タイプ

タイプは

は、

、DB2 DBCLOB データ

データ

データ

データ・

・・

・タイプ

タイプ

タイプ

タイプ

にマップ

マップ

マップ

マップされます

されます

されます

されます。

• XMLTYPE データ

データ

データ・

データ

・・

・タイプ

タイプ

タイプ

タイプは

はサポート

サポート

サポート

サポートされません

されません

されません。

されません

• TYPE 宣言

宣言

宣言は

宣言

は、

、関数

関数、

関数

関数

、プロシージャー

プロシージャー

プロシージャー

プロシージャー、

、トリガー

トリガー、

トリガー

トリガー

、および

および

および

および無名

無名

無名ブロック

無名

ブロックでは

ブロック

ブロック

では

では

ではサポート

サポート

サポートされません

サポート

されません

されません

されません。

• FOR EACH STATEMENT オプション

オプション

オプション

オプションは

は、

、PL/SQL トリガー

トリガーでは

トリガー

トリガー

では

では

ではサポート

サポート

サポート

サポートされません

されません

されません

されません。

(37)

パッケージ(モジュール)のサポート

パッケージ(モジュール)のサポート

(38)

パッケージ(モジュール)のサポート

• モジュール

Oracleの

のパッケージ

パッケージ

パッケージ

パッケージに

に相当

相当

相当

相当する

する

するオブジェクト

する

オブジェクト

オブジェクト

オブジェクト

関数、

関数

関数

関数

、プロシージャー

プロシージャー

プロシージャー、

プロシージャー

、タイプ

タイプ

タイプ、

タイプ

、変数

変数

変数

変数などの

などの

などのオブジェクト

などの

オブジェクト

オブジェクト

オブジェクトをまとめた

をまとめた

をまとめた

をまとめたオブジェ

オブジェ

オブジェ

オブジェ

クト

クト

クト

クト

以下のオブジェクトを含められる

SQLプロシージャー

SQLファンクション

外部プロシージャー

外部ファンクション

グローバルコンディション

Moduleの初期化処理

ユーザー定義タイプ(配列、連想配列、行タイプ、カーソルタイプ)

グローバル変数

PL/SQLの

のパッケージ

パッケージ

パッケージと

パッケージ

と同

同じ

じ機能

機能

機能

機能を

を提供

提供

提供

提供

PL/SQLではCREATE PACKAGE文によりモジュールを作成

SQL PLではCREATE MODULE文によりモジュールを作成

Module

SQLプロシージャー

グローバル変数

SQLファンクション

・・

・・

・・

(39)

モジュールの構成

• Moduleは仕様部と本体で構成される

仕様部

オブジェクトの呼び出し方法の記述

グローバル変数やユーザー定義タイプ(配列、連想配列、カーソルタイプ・・・)の宣言も行う

本体

プロシージャーやファンクションを実装

CREATE MODULE moo@

ALTER MODULE moo PUBLISH PROCEDURE prot

(IN a INT, IN b BIGINT, IN c VARCHAR(20))

LANGUAGE SQL@

ALTER MODULE moo ADD PROCEDURE prot

(IN a INT, IN b BIGINT, IN c VARCHAR(20))

BEGIN

DECLARE stmt VARCHAR(1000);

DECLARE c1 CURSOR WITH RETURN FOR sl;

SET stmt = 'SELECT 1 FROM (values(1))';

PREPARE sl FROM stmt;

OPEN c1;

END@

仕様部

仕様部

仕様部

仕様部

本体

本体

本体

本体

(40)

モジュールのメリット

• モジュール内オブジェクトの共用

変数、カーソル、型、例外、ローカルルーチンを共有できる

• 名前衝突の回避

プロシージャー名、ファンクション名、変数名の衝突を回避で

きる

• 情報の隠蔽

モジュール内のみで使用可能なオブジェクトの作成が可能

• 権限のコントロール

モジュール単位に権限のgrant/revokeが可能

(41)

モジュールとPL/SQL

• PL/SQLでパッケージを作成するとモジュールとして登録される

PL/SQLではモジュールと同じ機能をパッケージで提供している

C:¥work>db2 -tvf modtest.sql set sqlcompat db2

DB20000I SET SQLCOMPAT コマンドが正常に完了しました。

create module mod1

DB20000I SQL コマンドが正常に完了しました。

alter module mod1 publish variable var1 int default 0 DB20000I SQL コマンドが正常に完了しました。

alter module mod1 publish procedure print DB20000I SQL コマンドが正常に完了しました。

alter module mod1 publish procedure plus(in p1 int) DB20000I SQL コマンドが正常に完了しました。

alter module mod1 publish function get() returns int DB20000I SQL コマンドが正常に完了しました。

alter module mod1 add procedure print begin call dbms_output.put_line(var1); end

DB20000I SQL コマンドが正常に完了しました。

alter module mod1 add procedure plus(in p1 int default 1) begin set var1 = var1 + p1; end

DB20000I SQL コマンドが正常に完了しました。

alter module mod1 add function get() returns int return var1 DB20000I SQL コマンドが正常に完了しました。

CC:¥work>db2 -tvf pkgtest.sql set sqlcompat plsql

DB20000I SET SQLCOMPAT コマンドが正常に完了しました。

create or replace package pkg1 is var1 int :=0;

procedure print;

procedure plus(p1 in int); function get return int; end;

DB20000I SQL コマンドが正常に完了しました。

create or replace package body pkg1 is procedure print is

begin

dbms_output.put_line(var1); end;

procedure plus(p1 in varchar2 default 1) is begin

var1 := var1 + p1; end;

function get return int is begin return var1; end; end; DB20000I SQL コマンドが正常に完了しました。

SQL PLでモジュールを作成

・CREATE MODULE文でModuleを作成後、ALTER MODULE

文で仕様部、本体を追加する

PL/SQLでパッケージ(モジュール)を作成

・CREATE PACKAGE文、CREATE PACKAGE

BODY文を使用して作成

仕様部

仕様部

仕様部

仕様部

本体

本体

本体

本体

仕様部

仕様部

仕様部

仕様部

本体

本体

本体

本体

(42)

モジュールに関するシステムカタログ

SYSCAT.MODULES

モジュール情報

SYSCAT.MODULEOBJECTS

モジュールに含まれるオブジェクト情報

select char(modulename,5) modulename,dialect,moduletype from syscat.modules where modulename in ('PKG1','MOD1') MODULENAME DIALECT MODULETYPE

---MOD1 DB2 SQL PL M

PKG1 PL/SQL P

2 レコードが選択されました。

select char(objectmodulename,10) objectmodulename,char(objectname,20) objectname,objecttype,published from syscat.moduleobjects where objectmodulename in ('PKG1','MOD1') order by 1

OBJECTMODULENAME OBJECTNAME OBJECTTYPE PUBLISHED --- -- - ---MOD1 VAR1 VARIABLE Y

MOD1 PLUS PROCEDURE Y MOD1 GET FUNCTION Y MOD1 PRINT PROCEDURE Y PKG1 VAR1 VARIABLE Y PKG1 GET FUNCTION Y PKG1 PRINT PROCEDURE Y PKG1 PLUS PROCEDURE Y

PL/SQL PackageにはPが入る

SQL PL作成されたModuleにはMが入る

MOD1に含まれるオブジェクト

PKG1に含まれるオブジェクト

参照例

(43)

モジュールへのdb2lookの対応

• db2lookの

の-modオプション

オプション

オプション

オプションにより

により

により

によりモジュール

モジュール

モジュール

モジュールの

のDDLの

の生成

生成

生成

生成が

が可能

可能

可能

可能

-modオプション

-mod: Generate DDL statements for Module

このオプションは、-e および -x/xd オプションとともに使用できます。

C:¥SQLLIB¥samples¥sqlpl>db2look -d testdb -e -mod -- USER は以下のとおりです: DB2ADMIN -- 表の DDL の作成 -- この CLP ファイルの作成に使用した DB2LOOK のバージョン: "9.7" -- タイム・スタンプ: 2009/05/19 23:18:34 -- データベース名: TESTDB -- データベース・マネージャーのバージョン: DB2/NT Version 9.7.0 -- データベース・コード・ページ: 1208 -- データベース照合シーケンス: SYSTEM_943 CONNECT TO TESTDB; ---モジュール・サポートの DDL ステートメント "DB2ADMIN"."PKG1" ---create or replace package pkg1 is

var1 int :=0; procedure print;

procedure plus(p1 in int); function get return int; end;

;

create or replace package body pkg1 is ・・・

---モジュール・サポートの DDL ステートメント "DB2ADMIN"."MOD1" ---CREATE MODULE "DB2ADMIN"."MOD1";

SET CURRENT PATH = "SYSIBM","SYSFUN","SYSPROC","SYSIBMADM","SOTA"; alter module mod1 publish variable var1 int default 0;

SET CURRENT SCHEMA = "DB2ADMIN";

SET CURRENT PATH = "SYSIBM","SYSFUN","SYSPROC","SYSIBMADM","SOTA"; alter module mod1 PUBLISH procedure print ;

SET CURRENT SCHEMA = "DB2ADMIN";

SET CURRENT PATH = "SYSIBM","SYSFUN","SYSPROC","SYSIBMADM","SOTA"; alter module mod1 PUBLISH procedure plus(in p1 int default 1) ; SET CURRENT SCHEMA = "DB2ADMIN";

SET CURRENT PATH = "SYSIBM","SYSFUN","SYSPROC","SYSIBMADM","SOTA"; ・・・・

DDL生成例

(44)

モジュール制限事項

モジュール内の個別のオブジェクトに特権を付与することはできません。モジュールに付与、またはモジュールから取

り消せるのは、EXECUTE 特権だけです。

モジュールに含めることができるのは以下のデータベース・オブジェクトの定義だけです。

SQL プロシージャー

SQL 関数

外部プロシージャー

外部関数

作成済み条件

モジュール初期化の際に暗黙的に実行されるモジュール初期化プロシージャー

ユーザー定義のデータ・タイプ定義 (特殊タイプ、配列タイプ、連想配列タイプ、行タイプ、およびカーソル・タイプ

が含まれます)

すべてのデータ・タイプのグローバル変数

モジュールの初期化に使用する SYS_INIT 初期化プロシージャーは、パラメーターを参照したり、結果セットを戻した

りすることはできません。

Data Studio ツールまたはコントロール・センター・ツールから、モジュールの定義、変更、初期化、またはドロップを

行うことはできません。

今回のバージョンでは、モジュールの使用に関して以下の制約事項が適用されます。

初期化プロシージャーの定義および実行はできません。

(45)

まとめ

• Oracle互換機能強化概要

• DB2_COMPATIBILITY_VECTOR

• データタイプの互換性

• スカラー関数の機能強化

• ビルトイン・パッケージ・ライブラリー

• PL/SQLサポート

• パッケージ(モジュール)のサポート

(46)

ブランク

ブランク

ブランク

(47)

参考資料

参考資料

(48)

参考資料内容

• Weak Typing

• Public Synonym

• 作成済

作成済

作成済

作成済み

み一時表

一時表

一時表

一時表

• DB2_COMPATIBILITY_VECTORで

で有効

有効

有効

有効に

に出来

出来

出来

出来る

る機能

機能

機能

機能

ROWNUM

外部結合演算子(+)

階層照会

NUMBER データ・タイプ

VARCHAR2 データ・タイプ

DATE データ・タイプ

TRUNCATE TABLE

文字リテラル

コレクション・メソッド

データ・ディクショナリー互換ビュー

PL/SQL のコンパイル

(49)

• DB2 9.5までは

までは

まではstrict(厳密

までは

厳密

厳密

厳密な

な)

))

)データタイピング

データタイピング

データタイピング

データタイピング

トレンドはweak(緩やかな)タイピング (PERL, RUBY, PHP, …)

• DB2 9.7での

での

での新

での

新しい

しい

しい振

しい

振る

る舞

舞い

数値と文字列間の暗黙的な変換(cast):

割当て

SET salary := ‘52000’

比較

WHERE salary > ‘52000’

ビルトイン関数での利用

‘salary: ‘ || 52000 (文字列連結の例)

NULL やパラメーター・マーカーの利用性向上

非型付きパラメーター・マーカーとNULLを伴う関数呼び出し

この振る舞いにより、明示的なキャストが不要になりステートメント量が少なくな

ります。

Weak Typing

(50)

暗黙的な変換の例

$ db2 select "* from itest_w where salary

salary

salary

salary > '10000'“

SQL0401N The data types of the operands for the operation ">" are

not compatible. SQLSTATE=42818

$ db2 select "* from itest_w where salary

salary

salary

salary > '10000'"

NAME SALARY

---

---TEST 200000

1 record(s) selected.

V9.7

V9.5

INTEGER型で定

義している。

エラー

エラー

エラー

エラー

OK

OK

NumericとString

間の暗黙的な変換。

(51)

非型付きパラメーター・マーカーのデータタイプ判別

• 非型付きパラメーター・マーカー

データタイプ指定されていないパラメーター・マーカー

例: select * from t1 where c1 = ?、 values ?

PREPARE時にコンテキストからデータタイプが判別できない場合にはエラーとなる

select * from t1 where c1 = ? → PREPARE時に列C1のタイプからパラメーター・マーカーのタイプを判

values ? → PREPARE時にはデータタイプの判別が出来ないためエラー

• V9.7より

非型付きパラメーター・マーカーのデータタイプ判別をOPEN、

EXECUTE時まで据え置き、パラメーター・マーカーの入力値に基

づいたデータ・タイプの判別を行わせることが出来る

この機能を使用するには以下の条件が必要

PREPAREが実行され、据え置き準備(DeferredPrepare)の使用が有効になっている

レジストリ変数DB2_DEFERRED_PREPARE_SEMANTICS=YESが設定されている

DB2_DEFERRED_PREPARE_SEMANTICS=YESはUnicode,SBCS環境でのみの推奨値

型付きパラメーター・マーカー

・CAST関数によって明示的に型指定が

行われているパラメーターマーカー

・例:values cast(? as char(20))

参照

関連したドキュメント

Microsoft/Windows/SQL Server は、米国 Microsoft Corporation の、米国およびその

First three eigenfaces : 3 個で 90 %ぐらいの 累積寄与率になる.

主として、自己の居住の用に供する住宅の建築の用に供する目的で行う開発行為以外の開

No ○SSOP(生体受入) ・動物用医薬品等の使用記録による確認 (と畜検査申請書記載) ・残留物質違反への対応(検査結果が判

を指します。補助事業が期限内に完了しない場合,原則として,補助金をお支払いできません。関

READ UNCOMMITTED 発生する 発生する 発生する 発生する 指定してもREAD COMMITEDで動作 READ COMMITTED 発生しない 発生する 発生する 発生する デフォルト.

(※)Microsoft Edge については、2020 年 1 月 15 日以降に Microsoft 社が提供しているメジャーバージョンが 79 以降の Microsoft Edge を対象としています。2020 年 1

・Microsoft® SQL Server® 2019 Client Access License (10 User)ライセンス証書 オープン価格. オープン価格 Microsoft SQL