- PR -

【S2DAO】SQL内のIFコメントの評価

1
投稿者投稿内容
NVL
常連さん
会議室デビュー日: 2006/04/03
投稿数: 45
投稿日時: 2008-01-11 20:58
いつもお世話になっております。
S2DAO 1.0.47で開発しております。

SQL内において、IFコメントを使ってWHERE句を設定しているのですが、
SELECT * FROM A
WHERE KBN_A = '1'
/*IF kbnb == '1'*/
 AND A.KBN_B = '1'
/*END*/
のように、バインド変数に対して==で条件を設定しても正常に動作しません(
変数kbnが'1'であってもIFブロック内の条件文が実行されない)。

これは私がやろうとしていることが間違っているのでしょうか?
リファレンスでは 変数 != null のパターンしか掲載されていないですし。

どうかご教授のほど、宜しくお願いします。
未記入
会議室デビュー日: 2007/03/28
投稿数: 19
投稿日時: 2008-01-11 22:26
変数名がkbnbとkbnになっているのでそれのせいではないのでしょうか?
daoクラスで設定している定義とあっているのでしょうか?

NVL
常連さん
会議室デビュー日: 2006/04/03
投稿数: 45
投稿日時: 2008-01-12 00:54
すみません。転記ミスでした。変数はkbnです。

SELECT * FROM A
WHERE KBN_A = '1'
/*IF kbn == '1'*/
 AND A.KBN_B = '1'
/*END*/

となっています。
ためしにSELECT句に DECODE(/*kbn*/,'1','aho','boke') を記述するとトレースには
DECODE('1','1','aho','boke') と出力されるので変数kbnの値は1なのですが、
IFコメントの中身は実行されません。

ちなみに、これとは別のSQLで /*IF kbn != ''*/ としているやつがあるのですが、
これはちゃんと評価されています。 

さらに言うと、

AND
/*IF kbn == '1'*/
 A.KBN_B
/*END*/
/*IF kbn == '2'*/
 A.KBN_C
/*END*/
='1'

というような、変数値によってWhere対象となる列を変化させたい場合(あんまりないです
けど)、正常に動作されます。どう理解すれば良いのか困っております。。。

NVL
常連さん
会議室デビュー日: 2006/04/03
投稿数: 45
投稿日時: 2008-01-12 09:45
自己レスです。

/*IF kbn == "1"*/

のように変数の条件となる値(文字列)をダブルコーテーションで
囲ってやると正常に動作しました。
どうもお騒がせしました。
1

スキルアップ/キャリアアップ(JOB@IT)