(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6350071
(24)【登録日】2018年6月15日
(45)【発行日】2018年7月4日
(54)【発明の名称】データベースクライアント装置、データベースクライアントプログラム、及びデータベースシステム
(51)【国際特許分類】
G06F 17/30 20060101AFI20180625BHJP
【FI】
G06F17/30 330A
G06F17/30 340D
【請求項の数】5
【全頁数】12
(21)【出願番号】特願2014-152016(P2014-152016)
(22)【出願日】2014年7月25日
(65)【公開番号】特開2016-31544(P2016-31544A)
(43)【公開日】2016年3月7日
【審査請求日】2017年5月15日
(73)【特許権者】
【識別番号】000000295
【氏名又は名称】沖電気工業株式会社
(74)【代理人】
【識別番号】100180275
【弁理士】
【氏名又は名称】吉田 倫太郎
(74)【代理人】
【識別番号】100161861
【弁理士】
【氏名又は名称】若林 裕介
(74)【代理人】
【識別番号】100090620
【弁理士】
【氏名又は名称】工藤 宣幸
(72)【発明者】
【氏名】阿部 哲也
【審査官】
後藤 昂彦
(56)【参考文献】
【文献】
特開2012−243170(JP,A)
【文献】
米国特許出願公開第2012/0296936(US,A1)
【文献】
呉本 成浩,“セキュアなWebシステム構築への道 第4回 危険なデータベース SQLインジェクション対策”,日経バイト,日経BP社,2002年 9月22日,第233号,pp.152−157
【文献】
一志 達也,“PL/SQLもデバッグできるOracleツールの決定版 Oracle SQL Developer短期習得ゼミ 最終回 SQL Developerのレポート機能”,DB Magazine,日本,株式会社翔泳社,2007年 4月 1日,第16巻,第14号,pp.178−183
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/30
(57)【特許請求の範囲】
【請求項1】
複数のパラメータのうち一部又は全部のパラメータに対応する入力値を保持する入力値保持手段と、
上記複数のパラメータのうち上記入力値保持手段が入力値を保持したパラメータについては当該入力値を設定可能であり、上記複数のパラメータのうち上記入力値保持手段が入力値を保持しなかったパラメータについては所定の値が設定された構文を保持する構文保持手段と、
上記入力値保持手段が保持した入力値を、上記構文保持手段が保持した構文にバインド処理を行うバインド手段と、
上記バインド手段がバインド処理した構文をデータベースサーバに送信してデータ処理依頼するデータ処理依頼手段と
を有することを特徴とするデータベースクライアント装置。
【請求項2】
上記構文保持手段が保持する構文は、1又は複数の構文リストから選択したことを特徴とする請求項1に記載のデータベースクライアント装置。
【請求項3】
上記構文は、SQL構文であり、
上記所定の値は、入力値が文字情報の場合には、NULLであり、数値情報の場合には、
数値の零であって、
C言語により記述された言語により設計されたことを特徴とする請求項1又は2に記載のデータベースクライアント装置。
【請求項4】
データベースクライアント装置に搭載されたコンピュータを、
複数のパラメータのうち一部又は全部のパラメータに対応する入力値を保持する入力値保持手段と、
上記複数のパラメータのうち上記入力値保持手段が入力値を保持したパラメータについては当該入力値を設定可能であり、上記複数のパラメータのうち上記入力値保持手段が入力値を保持しなかったパラメータについては所定の値が設定された構文を保持する構文保持手段と、
上記入力値保持手段が保持した入力値を、上記構文保持手段が保持した構文にバインド処理を行うバインド手段と、
上記バインド手段がバインド処理した構文をデータベースサーバに送信してデータ処理依頼するデータ処理依頼手段と
して機能させることを有することを特徴とするデータベースクライアントプログラム。
【請求項5】
データベースクライアント装置と、データベースクライアントサーバとを備えるデータベースシステムにおいて、
データベースクライアント装置として請求項1〜3のいずれかに記載のデータベースクライアント装置を適用したことを特徴とするデータベースシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データベースクライアント装置、データベースクライアントプログラム、及びデータベースシステムに関する。
【背景技術】
【0002】
従来、ORACLE(登録商標)データベースクライアントにおいて、アプリケーション(以下、「APL」とも呼ぶ)は、データベースアクセス機能を実装するために、OCI(Oracle Call Interface)を使用することが可能である。OCIは、リレーショナルデータベース管理システム(Relational DataBase Management System、以下、「RDBMS」とも呼ぶ)向けの汎用インタフェース(Application Programming Interface、以下、「API」とも呼ぶ)である。例えば、OCIは、C又はC++言語で作成するアプリケーションからデータベース操作を実行することができる。
【0003】
OCIを用いたデータベースアクセスについて、以下の第1から第5の手順に沿って説明する。
【0004】
第1に、データベースクライアントのAPLは、データベースの検索例として以下のSQL構文を選択する。
【0005】
「SELECT 項目C1、項目C2、項目C3 FROM 表T WHERE 項目CA=xxx AND 項目CB=yyy AND 項目CC=zzz」(以降、このSQL構文を、「SQL構文W1」と呼ぶ)。
【0006】
また、APLは、データベース検索結果の受け渡しが必要となる変数及びデータベース検索条件を設定する変数を用意する。例えば、検索結果取得用の変数は、変数va、vb及びvcとし、検索条件を設定する変数は、変数vd、ve及びvfとする。
【0007】
第2に、APLは、SQL構文W1の項目CA〜CCのいずれかに設定する条件値を変数vd、ve、vfに設定する。
【0008】
第3に、APLは、SQL構文W1と変数va〜vfの関連付けを行う。この関連付けは、APLにSQL構文を埋め込んでSQL構文に変数を設定する際に必要な手続きであり、種々のデータベースシステムが提供するAPIにより行う。ORACLEクライアントライブラリが提供するOCIを用いて行うこの操作は、「変数のバインド」と呼ばれている。
【0009】
第4に、APLは、OCIによりSQL構文W1の実行を要求し、ORACLEクライアントライブラリが提供するOCIは、データベースサーバにトランザクションを発行する。
【0010】
第5に、OCIは、データベース検索結果を受信し、バインドされた変数(va、vb、vc)に検索結果を設定して、APLに応答を返す。
【0011】
以上が、従来のデータベースアクセスの一例である(特許文献1参照)。
【先行技術文献】
【特許文献】
【0012】
【特許文献1】特開2013−25446号公報
【発明の概要】
【発明が解決しようとする課題】
【0013】
しかし、APLの実装要件によっては、このデータベースに対する検索がSQL構文W1とは異なる検索条件の機能が必要となる可能性がある。この場合、SQL構文及び変数のバインドは、先に示した動作とは異なることになる。
【0014】
例えば、検索条件が項目CAの指定のみ(つまり、SQL構文W1よりも絞込みが必要でない場合)で検索する場合、SQL構文は、以下となるはずである。
【0015】
「SELECT 項目C1、項目C2、項目C3 FROM 表T WHERE 項目CA=xxx」(以降、このSQL構文を、「SQL構文W2」と呼ぶ)。
【0016】
また、データベースの検索条件がさらに追加(つまり、SQL構文W1よりも絞込みが必要な場合)して、検索する場合、SQL構文は、以下のような項目CDの条件が追加されるかもしれない。
【0017】
「SELECT 項目C1、項目C2、項目C3 FROM 表T WHERE 項目CA=xxx AND 項目CB=yyy AND 項目CC=zzz AND 項目CD=iii」(以降、この検索構文を、「SQL構文W3」とする)。
【0018】
このように、APLは、検索条件の要件毎に合致するSQL構文を有するインタフェースを実装することになるが、検索条件毎に条件分岐(IF文)によりインタフェースを実装することになれば、開発及びデバッグの工数が増大することになる。
図8は、条件分岐(IF文)により呼び出すインタフェース(関数)を示す説明図である。
図8(a)〜(c)では、検索項目に対する条件値(入力変数)の個数とバインドする変数の数が異なっていることを示している。
【0019】
また、OCIのバインド操作、つまり、バインドする変数の個数や、変数の型(例えば、int型やchar型)に対応したプログラム設計は、多くのバグを発生させる要因となり得る。
【0020】
このため、簡易な手段によりデータベースへ操作要求することができるデータベースクライアント装置、データベースクライアントプログラム、及びデータベースシステムが望まれている。
【課題を解決するための手段】
【0021】
第1の本発明のデータベースクライアント装置は、(1)複数のパラメータのうち一部又は全部のパラメータに対応する入力値を保持する入力値保持手段と、(2)上記複数のパラメータのうち上記入力値保持手段が入力値を保持したパラメータについては当該入力値を設定可能であり、上記複数のパラメータのうち上記入力値保持手段が入力値を保持しなかったパラメータについては所定の値が設定された構文を保持する構文保持手段と、(3)上記入力値保持手段が保持した入力値を、上記構文保持手段が保持した構文にバインド処理を行うバインド手段と、(4)上記バインド手段がバインド処理した構文をデータベースサーバに送信してデータ処理依頼するデータ処理依頼手段とを有することを特徴とする。
【0022】
第2の本発明のデータベースクライアントプログラムは、データベースクライアント装置に搭載されたコンピュータを、(1)複数のパラメータのうち一部又は全部のパラメータに対応する入力値を保持する入力値保持手段と、(2)上記複数のパラメータのうち上記入力値保持手段が入力値を保持したパラメータについては当該入力値を設定可能であり、上記複数のパラメータのうち上記入力値保持手段が入力値を保持しなかったパラメータについては所定の値が設定された構文を保持する構文保持手段と、(3)上記入力値保持手段が保持した入力値を、上記構文保持手段が保持した構文にバインド処理を行うバインド手段と、(4)上記バインド手段がバインド処理した構文をデータベースサーバに送信してデータ処理依頼するデータ処理依頼手段として機能させることを有することを特徴とする。
【0023】
第3の本発明は、データベースクライアント装置と、データベースクライアントサーバとを備えるデータベースシステムにおいて、データベースクライアント装置として第1の本発明を適用したことを特徴とするデータベースシステム。
【発明の効果】
【0024】
本発明によれば、データベースへの操作要求を簡易な手段により実装することにより、プログラム開発及びデバッグ工数の削減をすることができる。
【図面の簡単な説明】
【0025】
【
図1】実施形態に係るデータベースクライアントアプリケーションの動作を示すフローチャートである。
【
図2】実施形態に係るデータベースシステムの全体構成を示すブロック図である。
【
図3】データベース表Tの構成を示す説明図である。
【
図4】既存の方式と本発明の方式について、比較を示す説明図である。
【
図5】検索条件から導き出される従来のSQL構文の定義を示す説明図である。
【
図6】従来のSQL定義と本方式のSQL定義の比較を示す説明図である。
【
図7】実施形態に係るデータベースクライアントアプリケーションの動作の具体例を示す説明図である。
【
図8】従来のプログラム設計において、検索条件の要件毎に呼び出すインタフェース(アプリケーション)を示した説明図である。
【発明を実施するための形態】
【0026】
(A)主たる実施形態
以下、本発明によるデータベースクライアント装置、データベースクライアントプログラム、及びデータベースシステムの一実施形態を、図面を参照しながら詳述する。
【0027】
(A−1)実施形態の構成
図2は、この実施形態のデータベースシステム1の全体構成を示すブロック図である。
【0028】
データベースシステム1は、データベースクライアント10、データベースサーバ20を有している。また、データベースクライアント10、データベースサーバ20は、それぞれネットワークNに接続しているものとする。なお、データベースシステム1は、ネットワークNを有さず、独立で構築(スタンドアローン)しても良い。
【0029】
データベースシステム1は、データベースクライアント10から、データベースサーバ
20にデータベースのデータ更新や参照などのトランザクションが与えられ、処理が行われる環境である。
【0030】
データベースクライアント10は、データベースサーバ20にデータベースに係るトランザクションを与えるものである。
図2においては、データベースクライアント10は1つとなっているが、その数は限定されないものである。データベースクライアント10は、例えば、パソコン等の情報処理装置(1台に限定されず、複数台を分散処理し得るようにしたものであっても良い。)上に、データベースクライアントアプリケーション10Aをインストールすることにより、構築される。
【0031】
クライアントライブラリ11は、データベースクライアント10が、データベース20にアクセスする機能を提供するためのライブラリである。データベースクライアント10には、種々のデータベースシステムに応じて、ライブラリが提供されている。この実施形態では、クライアントライブラリ11は、ORCLEデータベースクライントが提供するライブラリを適用した例を示している。
【0032】
SQL定義テーブル12は、データベース22にアクセスするSQL構文のひな形が記憶されている。
【0033】
OCI13は、クライアントライブラリ11が提供するAPIを用いて、データベース222にアクセスするものである。
【0034】
データベースサーバ20は、データベースクライアント10から与えられたトランザクションの処理を行うものであり、RDBMS21とデータベース22を有している。
【0035】
RDBMS21は、リレーショナルデータベース管理システムの機能を担っており、例えば、データベースクライアント10から受けた取ったトランザクションの処理を行うものである。
【0036】
データベース22は、データ(レコード)の記憶部である。
図3は、データベース22に記憶されるデータベース表Tを示す説明図である。表Tにおける項目C1、C3、CA及びCCは、整数型(INTEGER型)であり、項目C2、C4、CB及びCDは、文字列型(VARCHAR型)である。なお、データベース表Tのデータは、データベース22に記憶される一例であり、データベース22は、種々の表に対応したデータが記憶されることは言うまでもない。
【0037】
データベースクライアントアプリケーション10Aは、入力条件からデータベース22へ問い合わせるSQL構文を定義するインタフェースである。データベースクライアントアプリケーション10Aは、検索条件毎のSQL構文と必要となる変数の関係を明確にするため、以下の条件で機能実装の仕様が決定される。なお、データベースクライアントアプリケーション10Aは、種々のプログラミング言語により実装されるが、この実施形態では、C言語により実装した例を示している。
【0038】
データベースクライアントアプリケーション10Aは、要件定義から必要となるデータベース検索機能の条件を抽出し、SQL構文を定義する。このとき、検索条件で指定される項目数は明確になるようにする。例えば、先述の検索条件であるSQL構文W1〜W3の3種類の検索構文を例に説明する。SQL構文W1は、「項目CAの指定」、SQL構文W2は、「項目CA、CB、CCの指定」、SQL構文W3は、「項目CA、CB、CC、CDの指定」となっていた。つまり、ここでの作業において、要件定義上の最大指定項目数は、4項目ということになる。
【0039】
次に、データベースクライアントアプリケーション10Aは、検索条件指定に必要な変数を定義し、検索項目と固定的に結びつける。先に述べた従来の方式では、引数と条件指定項目の関係がインタフェース毎に異なっていた。インタフェースAでは、検索条件の項目CAに変数vdがバインドされているが、インタフェースBでは、変数vdは、検索条件の項目CBにバインドされている。データベース表Tの項目CAが整数型(INTEGER型)、項目CBが文字列型(VARCHAR)のため、インタフェースAの引数vdは、整数型(int型)、インタフェースBの引数vdは、文字型(char型)と使い分けて使用する必要があった。
【0040】
一方、データベースクライアントアプリケーション10Aは、検索条件に指定される項目と変数を固定的な関係にする。つまり、上記で検索条件の指定項目が求まり、これらの項目に対して、必要な変数を1対1で定義することを意味し、定義する変数と条件項目を1対1とすることで、条件項目の型に合致した変数として定義できる。結果として、検索で指定する項目数の最大4に対して、指定項目CAへのバインド変数はvd、項目CBへのバインド変数はve、項目CCへのバインド変数はvf、項目CDへのバインド変数はvgとなる。これにより、検索条件毎のSQL構文へのバインドは全て統一される。
【0041】
以上をまとめると、インタフェースの実装について、
図4で示す事項を導き出すことができる。
図4は、既存の方式と本発明の方式とについて、インタフェース(関数)、インタフェース引数、変数のバインド及びSQL構文の定義数の観点から比較を示す説明図である。
【0042】
図4では、SQL構文の定義数は、両方式に差異は存在しないが、その他の項目については、差異が存在することが読み取れる。
【0043】
次に、データベースクライアントアプリケーション10Aは、SQL構文のパターン定義を行う。定義したSQL構文は、SQL定義テーブル12に記憶される。まず、データベースクライアントアプリケーション10Aは、検索条件で指定する項目の最大数は4であるため、最小1、最大4の検索条件パターンを列挙する。検索条件のパターン総数は、以下の(1)式で求められる。
検索条件のパターン総数=
4C
0+
4C
1+
4C
2+
4C
3+
4C
4=16…(1)
【0044】
図5は、検索条件から導き出される従来のSQL構文の定義を示す説明図である。
図5(a)は、検索項目指定数が0の場合のSQL構文を1つ示している。
図5(b)は、検索項目指定数が1の場合のSQL構文を4つ示している。
図5(c)は、検索項目指定数が2の場合のSQL構文を6つ示している。
図5(d)は、検索項目指定数が3の場合のSQL構文を4つ示している。
図5(e)は、検索項目指定数が4の場合のSQL構文を1つ示している。
【0045】
但し、この従来のSQL定義は、必要な検索条件のみを付与する定義であり、これをプログラムで実装することは、結局、検索条件毎にバインドする変数が異なる従来の方式となってしまう。
【0046】
データベースクライアントアプリケーション10Aは、このSQL定義をさらに
図6のように展開する。
図6は、従来の一般的なSQL定義(
図5)と本方式のSQL定義の比較を示す説明図である。
図6の(a)〜(d)は
図5の(a)〜(d)と同一の関係であって、先に説明した検索項目指定数に対するSQL構文の数が同じグループを示している。以下に、
図6の具体例を説明する。
【0047】
本方式のSQL定義は、バインド変数の値を項目指定条件に使用しない場合には、検索条件として利用されないような宣言をしている。例えば、検索条件に項目CC、項目CDが指定されない場合、通常であればSQL定義は以下となる。
「SELECT 項目C1、項目C2、項目C3 FROM 表T WHERE 項目CA=バインド変数vd AND 項目CB=バインド変数ve」
【0048】
これに対し、本方式のSQL定義は以下である。
「SELECT 項目C1、項目C2、項目C3 FROM 表T WHERE 項目CA=バインド変数vd AND 項目CB=バインド変数ve AND バインド変数vf=0 AND バインド変数vg is NULL」
【0049】
データベース表Tを構成する項目CA及び項目CCの型は、整数型(INTEGER型)であることから、バインド変数vdは、C言語のプログラム上、整数型(int型)となるはずであり、項目CB及び項目CDの型は、VARCHAR型であることから、C言語のプログラム上、文字型(char型)となるはずである。
【0050】
ここで、本方式における項目CC、項目CDが指定されない場合のSQL定義として、バインド変数vf=0が意味するところは、項目CCへの条件ではなく、「バインド変数vfの値が0である」という条件になることである。C言語のプログラム上で、項目CCへの条件指定がない場合は、バインド変数vfには初期値を設定する実装になっていれば、バインド変数vfの値は0となるべきである。このとき、「バインド変数vfの値が0である」という条件は「真」となり、SQL構文を解析するデータベースサーバ20は、エラー検出をしない。
【0051】
同様に、バインド変数vf=0 AND バインド変数vg is NULLが意味するところは、項目CDへの条件ではなく、「バインド変数vgの値がNULLである」という条件になることである。C言語のプログラム上で、項目CDへの条件指定がない場合は、バインド変数vgに渡される文字列ポインタにNULLが設定する実装になっていれば、「バインド変数vgの値がNULLである」という条件は「真」となり、SQL構文を解析するデータベースサーバ20は、エラー検出はしない。
【0052】
よって、このSQL定義により各検索条件において、必ず全てのバインド変数を使用することになり、C言語のプログラムにおいて、変数をバインドする処理は、使用するSQL定義に関係なく統一される。つまり、条件分岐(IF文)を実装する上で、検索条件を指定するための変数vd、ve、vf、vgを受け取り、SQL定義に対して、必ずve、vd、vf、vgをバインドし、SQLの発行処理を実行することで、検索結果を正常に受け取る事ができるということである。
【0053】
なお、本方式のSQL定義は、以下である。
「SELECT 項目C1、項目C2、項目C3 FROM 表T WHERE 項目CA=バインド変数d AND 項目CB=バインド変数e AND バインド変数vf=0 AND バインド変数vg is NULL」
【0054】
上記のSQL定義で得られる検索結果は、以下のSQL定義と同等なものとなる。
「SELECT 項目C1、項目C2、項目C3 FROM 表T WHERE 項目CA=バインド変数vd AND 項目CB=バインド変数ve」
【0055】
(A−2)実施形態の動作
図1は、実施形態のデータベースクライアントアプリケーション10Aの動作を示すフローチャートである。
【0056】
データベースクライアントアプリケーション10Aは、入力された検索条件のパラメータ変数の設定の有無をチェックする(S101)。なお、値が設定されていない変数は、初期値となる。例えば、初期値は、項目が整数型(INTEGER型)の場合には0、文字型の場合にはNULLを設定する。
【0057】
データベースクライアントアプリケーション10Aは、検索の条件に合致するSQL定義をSQL定義テーブル12から取得し、メモリ上に展開する(S102)。
【0058】
データベースクライアントアプリケーション10Aは、検索条件変数及び検索結果取得変数を全てバインドする(S103)。
【0059】
データベースクライアントアプリケーション10Aは、クライアントライブラリ11が提供するOCI13によりSQLの実行を要求する。OCI13は、ネットワークNを介してデータベースサーバ20にトランザクションを発行する(S104)。
【0060】
データベースクライアントアプリケーション10Aは、ネットワークNを介してデータベースサーバ20から検索結果を取得する(S105)。
【0061】
図7は、実施形態のデータベースクライアントアプリケーション10AがOCI13を用いてデータベースアクセスする基本動作を示す説明図である。
図7では、データベース表Tの検索対象は、項目C1、項目C2、項目C3であり、条件として、項目CAに変数vd、項目CBに変数ve、項目CCに変数vf、項目CDに変数vgを設定した場合を示している。仮に、項目CD(文字列型)に条件が付されない場合には、変数vgはNULLであるという条件を付加することなる。いずれにしも、発行するSQLに関わらず変数のバインド処理は一定となる。
【0062】
(A−3)実施形態の効果
データベース表の検索条件に対して、条件指定項目の最大数分のバインド変数、及び検索パターン毎のSQL定義を用意することにより、プログラムにおける入力パラメータ、変数バインド処理は統一される。その結果、検索用インタフェースの実装が単一のインタフェースで実現できるため、プログラム開発及びデバッグ工数の削減が可能となる。
【0063】
(B)他の実施形態
上記の実施形態に加えて、さらに、以下に例示するような変形実施形態も挙げることができる。
【0064】
(B−1)上記の実施形態では、データベースクライアントアプリケーション10Aが定義したSQL構文は検索(SELECT)のみを示したが、更新(UPDATE)や、削除(DELETE)において、対象となるレコードを指定するためのカラム指定条件に対して、同様のSQL構文に置き換えて本発明を適用しても良い。
【0065】
(B−2)上記の実施形態では、データベースクライアントアプリケーション10Aは、予め定義したSQL構文テーブル12から、検索条件に合致したSQL構文を当該テーブルから選択する処理を示したが、検索条件に合致したSQL構文を処理の度に動的に作成しても良い。
【0066】
(B−3)上記の実施形態では、データベースシステム1としてORACLEデータベースシステムを適用した例を示したが、他のデータベースシステムを利用して、本発明を適用しても良い。
【符号の説明】
【0067】
1…データベースシステム、10…データベースクライアント、10A…データベースクライアントアプリケーション、11…クライアントライブラリ、12…SQL定義テーブル、13…OCI、20…データベースサーバ、21…RDBMS、22…データベース、N…ネットワーク、X…データベース表