Re: Oracle DATETIME型項目への更新
aita
投稿数: 3
Jiro123様
ご返答ありがとうございます。
説明が不足しており、大変申し訳ありません。
質問に回答してくださる方が二度手間とならないよう、以後質問する際には気をつけます。
それでは試した内容を記載させて頂きます。
■xmlファイル修正
<Mapping>
<GW>99</GW>
<From_DB_Type>DATE </From_DB_Type>
<To_Data_Type>String</To_Data_Type>
<MagicPic>YYYY/MM/DD HH:MM:SS</MagicPic>
<StoredSize>14 </StoredSize>
<StoredAs></StoredAs>
<StoradAsNumber>19</StoradAsNumber>
<StoredType></StoredType>
</Mapping>
データマッパーノード特性の計算値:「'2011/07/15 10:11:12'」(固定で渡しました)
insert後selectを行うと、「2011/10/69 00:00:00」のように、不正な日付がselectされました。
また、Jiro123様のご返答を元にStringDateにチェックを入れ実行したところ、Mapper.logのValue句はシングルコーテーションが付いていない状態だったため、下記の4点の内容を試しました。
【1】ASCIIChrを用いてシングルコーテーション付加
DBオペレーション:Insert
データマッパーノード特性の計算値:「ASCIIChr (39) & '2011/08/01 12:34:56' & ASCIIChr (39)」
と定義し、Mapper.logで確認したところ、「'2011/08/01 12:34:5」となっており、19Byteで切られていました。
(SqlPlusでのSELECT結果は「8799/09/08 00:00:00」でした)
【2】書式を'YYYYMMDDHH24MISS'に変更(「'」付き)
19Byteで切られたため、alter session set NLS_DATE_FORMAT='YYYYMMDDHH24MISS'とし、
DBオペレーション:Insert
データマッパーノード特性の計算値:「ASCIIChr (39) & '20110801123456' & ASCIIChr (39)」
と定義し、Mapper.logで確認したところ、「'20110801123456'」となっており、
SqlPlusでのSELECT結果は「8799/10/80 00:00:00」でした。
【3】書式を'YYYYMMDDHH24MISS'に変更(「'」なし)
DBオペレーション:Insert
データマッパーノード特性の計算値:「'20110801123456'」
と定義し、Mapper.logで確認したところ、「20110801123456」となっており、
SqlPlusでのSELECT結果は「2011/08/01 00:00:00」でした。
【4】既出の質問「ストアドプロシージャとストアドファンクションの呼び出し」
でSQLServerの内容ではありますが、直接SQL文を発行する方法がありましたので試しました。
DBオペレーション:Delete
送り先SQL文「Insert into スキーマ名.テーブル名 (テーブル名.文字型列名,テーブル名.数値型列名,テーブル名.DATETIME型列名) values ('a',1,TO_DATE('20110801123456','YYYYMMDDHH24MISS'));」
と定義し、Mapper.logで確認したところ、「Delete FROM t into スキーマ名.テーブル名 (テーブル名.文字型列名,テーブル名.XXX」
となっており、SQL文が自分で書いたInsert文からDelete文になっていて、SQLの途中で切れている状態です。
selectしても行が作成されていませんでした。
また、Mapper.logに「Error ORA-00911: 文字が無効です。」と出力されていました。
(送り先に入力したSQLが正しいことは確認済です。)
以上の内容を試しましたが、DATETIME型に対し正しく更新が行えていない状態です。
もしこれ以外にも設定すべき点や違ったやり方などありましたらご教示ください。
どうか宜しくお願い致します。
ご返答ありがとうございます。
説明が不足しており、大変申し訳ありません。
質問に回答してくださる方が二度手間とならないよう、以後質問する際には気をつけます。
それでは試した内容を記載させて頂きます。
■xmlファイル修正
<Mapping>
<GW>99</GW>
<From_DB_Type>DATE </From_DB_Type>
<To_Data_Type>String</To_Data_Type>
<MagicPic>YYYY/MM/DD HH:MM:SS</MagicPic>
<StoredSize>14 </StoredSize>
<StoredAs></StoredAs>
<StoradAsNumber>19</StoradAsNumber>
<StoredType></StoredType>
</Mapping>
データマッパーノード特性の計算値:「'2011/07/15 10:11:12'」(固定で渡しました)
insert後selectを行うと、「2011/10/69 00:00:00」のように、不正な日付がselectされました。
また、Jiro123様のご返答を元にStringDateにチェックを入れ実行したところ、Mapper.logのValue句はシングルコーテーションが付いていない状態だったため、下記の4点の内容を試しました。
【1】ASCIIChrを用いてシングルコーテーション付加
DBオペレーション:Insert
データマッパーノード特性の計算値:「ASCIIChr (39) & '2011/08/01 12:34:56' & ASCIIChr (39)」
と定義し、Mapper.logで確認したところ、「'2011/08/01 12:34:5」となっており、19Byteで切られていました。
(SqlPlusでのSELECT結果は「8799/09/08 00:00:00」でした)
【2】書式を'YYYYMMDDHH24MISS'に変更(「'」付き)
19Byteで切られたため、alter session set NLS_DATE_FORMAT='YYYYMMDDHH24MISS'とし、
DBオペレーション:Insert
データマッパーノード特性の計算値:「ASCIIChr (39) & '20110801123456' & ASCIIChr (39)」
と定義し、Mapper.logで確認したところ、「'20110801123456'」となっており、
SqlPlusでのSELECT結果は「8799/10/80 00:00:00」でした。
【3】書式を'YYYYMMDDHH24MISS'に変更(「'」なし)
DBオペレーション:Insert
データマッパーノード特性の計算値:「'20110801123456'」
と定義し、Mapper.logで確認したところ、「20110801123456」となっており、
SqlPlusでのSELECT結果は「2011/08/01 00:00:00」でした。
【4】既出の質問「ストアドプロシージャとストアドファンクションの呼び出し」
でSQLServerの内容ではありますが、直接SQL文を発行する方法がありましたので試しました。
DBオペレーション:Delete
送り先SQL文「Insert into スキーマ名.テーブル名 (テーブル名.文字型列名,テーブル名.数値型列名,テーブル名.DATETIME型列名) values ('a',1,TO_DATE('20110801123456','YYYYMMDDHH24MISS'));」
と定義し、Mapper.logで確認したところ、「Delete FROM t into スキーマ名.テーブル名 (テーブル名.文字型列名,テーブル名.XXX」
となっており、SQL文が自分で書いたInsert文からDelete文になっていて、SQLの途中で切れている状態です。
selectしても行が作成されていませんでした。
また、Mapper.logに「Error ORA-00911: 文字が無効です。」と出力されていました。
(送り先に入力したSQLが正しいことは確認済です。)
以上の内容を試しましたが、DATETIME型に対し正しく更新が行えていない状態です。
もしこれ以外にも設定すべき点や違ったやり方などありましたらご教示ください。
どうか宜しくお願い致します。
投票数:0
平均点:0.00
投稿ツリー
-
Oracle DATETIME型項目への更新
(aita, 2011-7-27 18:58)
- Re: Oracle DATETIME型項目への更新 (Jiro123, 2011-7-30 20:23)
- Re: Oracle DATETIME型項目への更新 (aita, 2011-8-1 20:10)
- Re: Oracle DATETIME型項目への更新 (yoshi, 2011-8-1 20:31)
- Re: Oracle DATETIME型項目への更新 (aita, 2011-8-2 10:16)