oo4oでストアドのDATE型パラメータにNULL値を渡すには?


はなまる  2004-09-23 07:48:54  No: 85706

お世話になっております。
ORACLE9iとVB6.0でoo4oで開発しているのですが、

OraDatabase.Parameters("日付").Value = NULL

のように
DATE型のパラメータに対して、NULLを引き渡そうとしていますが、
うまくいかずに困っています。oracle側で
「OIP-00005: 変数は正しい日付型ではありません。」という
エラーが出力されてしまいます。

OraDatabase.Parameters("日付").Value = ""

としても「OIP-00005: 変数は〜」という同じエラーが
出力されてしまいます。

NUMBER型やVARCHAR2型のパラメータに対して

OraDatabase.Parameters("数値").Value = NULL
OraDatabase.Parameters("文字").Value = NULL

or

OraDatabase.Parameters("数値").Value = ""
OraDatabase.Parameters("文字").Value = ""

と記述すると、どちらの方法でもNULLで引き渡すことができるようなのですが、
DATE型では上記の方法は使えません。大変、申し訳ありませんが、
どなたかご存知の方がおられれば、お教え願えないでしょうか?


gari  2004-09-27 21:57:34  No: 85707

この文章だと、OraDataBaseの型が分からないのであれですが、

    Dim objSession As Object
    Dim objDataBase As OraDatabase
    Dim objDynaSet  As OraDynaset
    Dim strBuff     As String
    
    Set objSession = CreateObject("OracleInProcServer.XOraSession")
    Set objDataBase = objSession.OpenDatabase("ホスト名", "ユーザ名/パスワード", 0&)
    
    Set objDynaSet = objDataBase.CreateDynaset("select * from 表名", 0&)
    
    objDynaSet.DBAddNew
    
    objDynaSet.Fields("日付").Value = Null
    objDynaSet.Fields("数値1").Value = ""
    objDynaSet.Fields("数値2").Value = Null
    
    objDynaSet.DBUpdate
    
    Set objSession = Nothing
    Set objDataBase = Nothing

で私の場合は大丈夫でしたが…


Dental  2004-09-27 23:03:08  No: 85708

gariさん。今回の質問は、「日付型のフィールド」ではなく、「日付型のパラメータ」みたいですよ。

手元にOracleが無く確認できないので、Oracle系の掲示板(VB系の掲示板ではない)を幾つか覗いてみましたが、確かに、OIP-00005 が発生するという現象が幾つか報告されているようです。

最新のパッチを適用しても駄目なようなら、Oracleのサポートに問い合わせてみては?
それでも駄目なら、Oracle側をVARCHAR2で受け取る仕様にしておき、内部でTO_DATEする事で代用してみるとか…。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加