「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>機能一覧]] *目次 [#oe1075ce] #contents *概要 [#aa930eac] SQLをXMLで修飾することにより、文字列連結処理を実装すること無くSQLを動的SQL化できます。 **デモ動画(Youtube) [#gc6fe6ad] -Open棟梁の動的パラメタライズド・クエリ分析ツールのチュートリアル~ https://www.youtube.com/watch?v=6_8baBTVcRM&vl=ja **説明資料(SlideShare) [#v2804d98] -http://www.slideshare.net/daisukenishino/open-0150/15 -http://www.slideshare.net/daisukenishino/open-0150/16 #ref(dpq_s.png,left,nowrap,動的パラメタライズド・クエリ) **特徴 [#c4e7e1bf] -パラメタ設定だけで動的なパラメタライズド・クエリを実行でき、開発者は、複雑な文字列連結処理の制御から解放されます。 -また、これにより、条件検索機能などの機能を持った、DBアプリケーション開発の生産性・品質を向上させます。 **クエリ定義 [#x6ad9813] 定義の作成は、通常のSQLの「動的化したい部位」にXMLのタグ付けを行うだけ。 <?xml version="1.0"?> <ROOT> SELECT * FROM XXX <WHERE> WHERE <LIST>YYY IN (@p1)</LIST> <IF>AND ZZZ = @p2<ELSE>IS NULL</ELSE></IF> </WHERE> <PARAM> p1, Int32, 1, 2<DIV/> p2, String, xxxxxxxxxx </PARAM> </ROOT> *ポイント [#g8cfd317] -この「動的パラメタライズド・クエリ」は「[[動的パラメタライズド・クエリ分析ツール]]」を使用してテスト実行することができます。 -「動的パラメタライズド・クエリ」のPARAMタグに記載されたパラメタは、この「[[動的パラメタライズド・クエリ分析ツール]]」を使用してテスト実行する際に使用されます。 -実際のプログラムから「動的パラメタライズド・クエリ」を実行する場合は、APIからパラメタを設定する形になります。 **AS-IS、TO-BE [#b72d107b] ***AS-IS [#r9a0b26c] 動的SQLには、 -WHERE、 JOIN句の付与・削除 -AND、OR演算子の付与・削除 -IN句のパラメタを条件数に合わせ用意 -.etc などの制御が面倒で実装が難しいと言う問題がありました。 ***TO-BE [#t7aa5482] しかし、動的パラメタライズド・クエリ機能を使用することで、パラメタ設定だけで動的SQLの組み立てを制御・実行できるようになります。 これにより -プログラマは、複雑な文字列連結処理の制御から解放され、生産性 / 品質が向上します。 -また、プログラムも読み易くなり、品質 / 保守性が向上、脆弱性の作り込みも防止できます。 **優位性 [#j0fb8345] 「Open 棟梁」の動的パラメタライズド・クエリの優位性について説明します。 ***優位性1 [#qa8b593e] 定義の作成は、通常のSQLの「動的化したい部位」にXMLのタグ付けを行うだけであるため、動的パラメタライズド・クエリ定義は、習得し易くなっております。 ***優位性2 [#z1a466d1] 専用のツール([[動的パラメタライズド・クエリ分析ツール]])を使用して、動的パラメタライズド・クエリ中に埋め込んだパラメタ情報をもとに、クエリ(XML定義)を事前にテストできます。 **その他の特徴 [#e6218d0a] ***特徴1 [#n215dd6f] -動的パラメタライズド・クエリでは、パラメタの設定値によりJOIN・WHERE句や、条件式の有効化・無効化を制御できますが、クエリ(XML定義)中で関係演算や論理演算を使用する方式はサポートしていません。 -これには、クエリ(XML定義)記述が煩雑にならないようにするという狙いと、非手続き言語中に複数のテストケースを混在させてしまった場合、カバレージ率をテストの指標に利用できなくなるという弊害を防ぐ狙いがあります。 ***特徴2 [#oda273de] クエリ(XML定義)は、 -動的パラメタライズド・クエリであるか、 -静的パラメタライズド・クエリSQLであるかが 自動的判定され、定義に合った方法で自動実行されます。 *関連 [#c419aef9] -[[静的パラメタライズド・クエリ]] -[[SetParameter]] -[[SetUserParameter]]