< :前の番号
^ :番号順リスト
> :次の番号
P :前の記事
N :次の記事
|<:スレッドの先頭
>|:次のスレッド
^ :返事先
_:自分への返事
>:同じ返事先を持つ記事(前)
<:同じ返事先を持つ記事(後)
---:分割してスレッド表示、再表示
| :分割して(縦)スレッド表示、再表示
~ :スレッドのフレーム消去
.:インデックス
..:インデックスのインデックス
よしだです
中村暁史 Nakamura Akifumi <BXQ04723 / nifty.ne.jp> writes:
> しかし微妙にヘンですね。
> cursor.parse("select * from emp where (job) = 'CLERK' ")
> はイケルのに
> cursor.parse("select * from emp where RTRIM(JOB) = :a ")
> cursor.bindrv(":a", "CLERK")
> からRTRIM関数を取ったらイケナイんですね。
> 逆に
> cursor.parse("select * from emp where RTRIM(JOB) = :a ")
> cursor.bindrv(":a", "CLERK ")
> これがイケルようだし。
>
> いずれにせよ、このへんの挙動の差って、Ruby側じゃなくて
> Oracleサーバー側の仕様ですよねえ?(^^;
bindrv メソッドでプログラム変数の型を VARCHAR2 にしているせ
いかもしれません。
CHAR 同士の比較では brank-padded comparison が行われて,
VARCHAR2 と CHAR では non-brank-padded comparison が行われる
ようです。
文字列リテラルは CHAR 扱いのようなので brank-padded
comparison が行われるのでしょう。
したがって以下のように変更するとおそらく期待したように動作す
るのではないでしょうか。
--- oracle.c.org Thu Jul 1 19:48:37 1999
+++ oracle.c Tue Nov 9 01:19:23 1999
@@ -492,7 +492,7 @@
}
GET_ORACURSOR(obj, cursor);
err = obndrv(&(cursor->cda), RSTRING(var)->ptr, -1,
- progv_ptr, progv_len, 1 /* VARCHAR2 */,
+ progv_ptr, progv_len, 96 /* CHAR */,
-1, &indp, NULL, -1, -1);
if (err) {
oerhms(&(cursor->conn->lda), cursor->cda.rc, buf, sizeof(buf));
副作用があるかどうかは確認していません。
--
吉田正人 INS エンジニアリング(株)
事業開拓室
yoshidam / inse.co.jp
yoshidam / yoshidam.net