お世話になっております。 A.中村です。

On Fri, 5 Nov 1999 17:16:22 +0900
Yoshida Masato <yoshidam / yoshidam.net> wrote:

> > cursor.parse("select * from emp where job='CLERK' ")
> > cursor.exec
> > 
> > ってやるとテーブルの望んだ行が検索されるんですが
> > 
> > cursor.parse("select * from emp where job=:a ")
> > cursor.bindrv(":a", "CLERK")
> > cursor.exec
> > 
> > ってやると一行も検索されてきません。


> require 'oracle'
> 
> conn = ORAconn.logon("scott", "tiger", "")
> cursor = conn.open
> cursor.parse("select * from emp where job=:a ")
> cursor.bindrv(":a", "CLERK")
> cursor.exec
> while r = cursor.fetch
>   p r
> end
> cursor.close
> conn.logoff

あ。劇的にミスっていました。

JOBの定義がCHAR(9)だったので、DBの中のデータは
"CLERK"ではなくて
"CLERK    "となっていました。

なので、sqlを
"select * from emp where RTRIM(JOB) = :a"
とする(右のspaceを削る)と、解決しました。
失礼しました。

#あ。ってことは、RDBC-Oracleのトリアエズ版が出来た。



しかし微妙にヘンですね。
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サーバー側の仕様ですよねえ?(^^;


#さて次はgetParamかな。