2009년 10월 13일 화요일

HiRDB sql

5.コメント
 /* コメント */はありますが、-- の1行コメントがありません。

6.LIKE検索の文字列連結
 なんと、LIKE検索時に、LIKE '%' || '文字列' || '%'のような
 文字列連結をするとエラーになるようです。
 よって、CONDITIONが"CONTAINS","STARTS","ENDS","NOT_CONTAINS"
 のSQLは、HiRDBではエラーになると思われます・・・

 対策としては、下記の2パターンがあると思います。
 (1)buyerItemCd_CONTAINS,buyerItemCd_STARTS,buyerItemCd_ENDS,
   buyerItemCd_NOT_CONTAINSを作成し、%をつけた文字列を設定。
   SQLファイルとしては、現状の'%'|| || '%'を削除。
 (2)複数入力ありのSQLと同様に、ジョンギルユーティリティで、
   検索条件SQLは作成してしまう。
   /*$conditionSql*/

 いずれにせよLIKE検索は、%と_のESCAPE対応が必要なので、どちらかの
 対応は必要になります。
 どうせ複数入力ありの対応をやるなら(2)でも良いかなぁと思っています。
 ユーザのロールや所属に合わせた範囲指定などだけをSQLファイルに
 指定してもらうイメージです。

【現状のSQLファイル】
/*IF buyerItemCd != null && buyerItemCd_CONDITION == "CONTAINS" */AND BUYER_ITEM_CD LIKE '%' || /*buyerItemCd*/ ||
'%'/*END*/
/*IF buyerItemCd != null && buyerItemCd_CONDITION == "STARTS" */AND BUYER_ITEM_CD LIKE '%' || /*buyerItemCd*//*END*/
/*IF buyerItemCd != null && buyerItemCd_CONDITION == "ENDS" */AND BUYER_ITEM_CD LIKE /*buyerItemCd*/ || '%'/*END*/
/*IF buyerItemCd != null && buyerItemCd_CONDITION == "NOT_CONTAINS" */AND BUYER_ITEM_CD NOT LIKE '%' || /*buyerItemCd*/
|| '%'/*END*/

 ちなみに、ESCAPE処理を検証したところ、下記の感じでよさそうです。
 LIKE '文字列' ESCAPE '|'とした場合の文字列の組み立て形。
 (1)画面入力された文字の|を||に置換
 (2)画面入力された文字の%を|%に置換
 (3)画面入力された文字の_を|_に置換
 (4)画面入力された文字の%を|%に置換
 (5)画面入力された文字の_を|_に置換
 (6)CONTAINS、STARTS、ENDS、NOT_CONTAINSの条件に合わせて、%を前後に追加
 
 例:画面の検索条件 テスト|12345→ '%テスト||12345%'
  

댓글 없음:

댓글 쓰기