[seasar-dotnet:1898] Re: [DBFlute]OutsideSQLでのエラー

kubo [E-MAIL ADDRESS DELETED]
2010年 12月 17日 (金) 21:42:06 JST


jfluteです。

uparrowさん、情報ありがとうございます。
何かしらのキャラクタ・セットのズレが
発生しているようですね。

以前、このような話もありましたが、
http://ml.seasar.org/archives/seasar-dotnet/2010-February/001552.html
このときは文字化けの話でしたね。

とりあえずTRANSLATE関数で回避できたと
いうことでよかったというところですが、
特別な型を利用しているわけではないということなので、
他のテーブルの)Behaviorのinsertがうまく動作して、
外だしSQLのinsert(だけ)で発生するというのが不思議ですね。
(発生するなら全部insertで発生するとかならわかりやすいですが)

2010/12/17  <[E-MAIL ADDRESS DELETED]>:
> uparrowです。
>
> jflute様、hajimeni様、返事をいただきましてありがとうございました。
>
>> > o ORA-12704 がOracle的にどんなときに発生するエラーなのか
> - 演算子または組込み関数の文字列オペランド(NLSPARAMS引数以外)のキャラクタ・セットが同じではない。
> - nlsparamsオペランドがデータベース・キャラクタ・セットと一致していない。
> - データベース・キャラクタ・セット以外のキャラクタ・セットを含む文字列デー
> タが、その文字列データを予期していなかった組込み関数に渡された。
> - CHR()またはCSCONVERT()の第2の引数が、CHAR_CSでもNCHAR_CSでもない。
> - INSERT文のVALUES句またはUPDATE文のSET句の文字列式に含まれたキャラクタ
> ・セットが、値を挿入する列のキャラクタ・セットと同じではない。
> - 表を作成するときにDEFAULT句に指定された値のキャラクタ・セットが、列に
> 対して宣言されたキャラクタ・セットと同じではない。
> - PL/SQLファンクションの引数が、対応するパラメータのキャラクタ・セット要
> 求に適合しない。
> のようなもののようです。ただ、/*pmb.INPUT_TIME*/が無い状態だと問題なく実
> 行できるのでこれらのことが原因なのか?でした。
>
>> > o カラムの型はどんな型なのか (特にパラメータとして使っているINPUT_TIME)
>> >  -> character set mismatch というメッセージがあるので型が疑わしいので
> 対象のテーブルはchar、varchar、dateのみで特別な型は使用しておりません。
>
>> > o OutsideSqlTest は動くか?
>> >  -> /*pmb.INPUT_TIME*/ はコメントとしてみなされていれば通る筈(!?)
> 問題なく動きました。
>
>> Oracleのバージョンは忘れましたが、NVARCHARにバインドしてINSERTするとおきた場合があった気がします。
> 情報ありがとうございます。
>
> いろいろと試行錯誤をしておったところ、
> insert into FAPAC_LOG_TBL (DISPO_FLAG, INPUT_TIME, FUNC_NO, TEHAI_NO)
> values (TRANSLATE(/*pmb.HOGE*/'0' USING CHAR_CS ), '000000', '00', '0000000000' )
> というようにTRANSLATE関数を入れたら実行できました。
>
> ちょっと直接の原因が分からないままなのですが、
> これで先に進むことができそうです。
>
>
>> hajimeniです。
>>
>> Oracleのバージョンは忘れましたが、NVARCHARにバインドしてINSERTするとおきた場合があった気がします。
>>
>> 何かの参考になれば。
>>
>> --
>> 西山はじめ
>>
>>
>>
>> 2010年12月16日22:11 kubo <[E-MAIL ADDRESS DELETED]>:
>> > 久保(jflute)です。
>> >
>> > こんばんは、uparrowさん
>> > 取り急ぎですが、
>> >
>> > o ORA-12704 がOracle的にどんなときに発生するエラーなのか
>> > o カラムの型はどんな型なのか (特にパラメータとして使っているINPUT_TIME)
>> >  -> character set mismatch というメッセージがあるので型が疑わしいので
>> > o OutsideSqlTest は動くか?
>> >  -> /*pmb.INPUT_TIME*/ はコメントとしてみなされていれば通る筈(!?)
>> >
>> > など、この辺りの情報も一緒に出して頂けると、
>> > もっとML閲覧者も追求がしやすいと思います。
>> >
>> > 2010/12/16  <[E-MAIL ADDRESS DELETED]>:
>> >> こんばんは、uparrowと申します。
>> >>
>> >> DBFluteのOutsideSQLでinsertを発行する必要があるのですが、
>> >> 問題が発生してしまいメールいたしました。
>> >> PKがないテーブルへデータをINSERTする必要があるためOutsideSQLで実行したい
>> >> のですが、次のようなログが出力され失敗します。
>> >>
>> >> /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
>> >> The SQL failed to execute!
>> >>
>> >> [Advice]
>> >> Please confirm the Exception message.
>> >>
>> >> [Exception]
>> >> Seasar.Framework.Exceptions.SQLRuntimeException
>> >> [ESSR0071]SQLException occured, because System.Data.OracleClient.OracleException: ORA-12704: character set mismatch
>> >>
>> >>   場所 System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle, Int32 rc)
>> >>   場所 System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, Boolean needRowid, OciRowidDescriptor& rowidDescriptor, ArrayList& resultParameterOrdinals)
>> >>   場所 System.Data.OracleClient.OracleCommand.ExecuteNonQueryInternal(Boolean needRowid, OciRowidDescriptor& rowidDescriptor)
>> >>   場所 System.Data.OracleClient.OracleCommand.ExecuteNonQuery()
>> >>   場所 Seasar.Framework.Util.CommandUtil.ExecuteNonQuery(IDataSource dataSource, IDbCommand cmd)
>> >>
>> >> [NextException]
>> >> System.Data.OracleClient.OracleException
>> >> ORA-12704: character set mismatch
>> >>
>> >>  ErrorCode = -2146232008
>> >>  HelpLink  =
>> >>
>> >> SQLは
>> >>
>> >> -- !df:pmb!
>> >> -- !!string              DISPO_FLAG!!
>> >> insert into FAPAC_LOG_TBL (DISPO_FLAG, INPUT_TIME, FUNC_NO, TEHAI_NO) values ('0', /*pmb.INPUT_TIME*/'000000', '00',
>> >> '0000000000' )
>> >>
>> >> というものです。
>> >> ただ、試しに、このSQLをパラメータを全く使用しない
>> >> insert into FAPAC_LOG_TBL (DISPO_FLAG, INPUT_TIME, FUNC_NO, TEHAI_NO) values ('0', '000000', '00', '0000000000' )
>> >> このようにして実行した場合は問題なくINSERTできるのです。
>> >>
>> >> どのあたりに原因があるのか全くわからず、なにか少しでも情報があればと思い
>> >> メールさせていただきました。
>> >>
>> >> なお、Oracleとの接続はOracle用プロバイダクラスで行っております。
>> >>
>> >> よろしくお願いいたします。
>> >> _______________________________________________
>> >> seasar-dotnet mailing list
>> >> [E-MAIL ADDRESS DELETED]
>> >> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>> >>
>> > _______________________________________________
>> > seasar-dotnet mailing list
>> > [E-MAIL ADDRESS DELETED]
>> > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>> >
>> _______________________________________________
>> seasar-dotnet mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>
> --
> むらかみれお <[E-MAIL ADDRESS DELETED]>
>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


seasar-dotnet メーリングリストの案内