@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

XMLWebサービス TO_DATE関数を使用するSQL文について

1
投稿者投稿内容
かえで
常連さん
会議室デビュー日: 2004/09/16
投稿数: 38
投稿日時: 2004-10-05 20:30
いつもお世話になっております。
VB.NET/XMLWebサービス使用でoracle9iを用いています。

今回投稿させて頂いたのはどうしても理解しがたいエラーが発生して悩んでいるためです。
例えば今以下のSQLが有るとします。

"SELECT * FROM TEST A WHERE TO_DATE(A.ENTDATE, 'RRRR/MM/DD') = TO_DATE('20041005', 'RRRR/MM/DD')"

SQL*Plus等を用いて直接SQL文を実行すると問題なくデータを取得できるのですが、
XMLWebサービスを使用して、実行すると「ORA-01858: 数値を指定する箇所に文字が指定されています。」の例外が発生してしまいます。
ちなみにWHERE句以降をはずして実行するとXMLWebサービス側で問題なくデータを取得できます。

ちなみにXMLWebサービス側での実行時コードは以下の通りです。
Dim loraCon As OracleConnection
Dim loraCmd As OracleCommand
Dim loraDA As OracleDataAdapter
Dim ldtTable As DataTable

loraCmd = New OracleCommand('実行するSQL文', loraCon ) ※loraConはDBコネクト情報
loraCmd.CommandType = CommandType.Text

loraDA = New OracleDataAdapter(loraCmd)
ldtTable = New DataTable
loraDA.Fill(ldtTable)   ←例外発生箇所


原因が分かる方がいらっしゃれば、ぜひご指摘よろしくお願いします。


※スレッドの投稿先に悩みましたが、もし場違いの場所であれば申し訳ありません。


[ メッセージ編集済み 編集者: かえで 編集日時 2004-10-05 20:43 ]
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-10-05 20:49
かえでさん、こんばんは。

引用:

"SELECT * FROM TEST A WHERE TO_DATE(TO_DATE(A.ENTDATE, 'RRRR/MM/DD') = TO_DATE('20041005', 'RRRR/MM/DD')"


Oracleを離れて久しいのですが、TO_DATE 関数の第二引数は、第一引数に指定された日付を表す文字列の書式を表すんじゃありませんでしたっけ?
「A.ENTDATE」の中身については不明ですが、'20041005'については'2004/10/05'とするか、第二引数を'RRRRMMDD'とすべきだったような...。

それと、「TO_DATE(TO_DATE(A.ENTDATE, 'RRRR/MM/DD')」は転記ミスですよね?
かえで
常連さん
会議室デビュー日: 2004/09/16
投稿数: 38
投稿日時: 2004-10-05 20:54
きくちゃんさま

TO_DATE(TO_DATE(〜
失礼致しました。転記ミスです。。。
A.ENTDATEはdate型であり、日付のほかに時刻も格納されている形です。
17-6 -2002 04:28:12 PM
のようなデータです。

ご指摘頂いた内容で試してみましたが、やはりダメでした。
TO_DATEでRRRR/MM/DDにする場合にデータのPM部分をなんとかしないといけないんでしょうか?
なぜ、直接実行だとうまくいって、プログラム実行だと例外なのか、かなり不思議です。。。


[ メッセージ編集済み 編集者: かえで 編集日時 2004-10-05 21:06 ]
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-10-06 12:56
かえでさん、こんにちは。

引用:

A.ENTDATEはdate型であり、日付のほかに時刻も格納されている形です。


日付時刻型の値をTO_DATE 関数で日付時刻型に変換するんですか?
この場合、TO_CHAR 関数で文字に変換するか、日付時刻型のまま、範囲で条件指定するべきじゃないかと思います。

引用:

なぜ、直接実行だとうまくいって、プログラム実行だと例外なのか、かなり不思議です。。。


OKの場合とNGの場合で、本当に全く同一のSQLを流してますか?
パラメータ使ったりしてませんか?
あるいは文字列操作でSQLを組み立てる際に、必要な箇所のシングルクォートが抜けてたりしませんか?
1

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