dポイントプレゼントキャンペーン実施中!

Olacle Databaseを9iから10gに移行しようとしています。
試用版のOracle10g(10g Release 2 (10.2) for Microsoft Windows (32-Bit) )
をダウンロードして既存のアプリケーションで動作させてみましたが、
9iのときは正常に挿入できたデータがエラーになってしまいました。
エラー内容は「 ORA-01400: ("スキーマ名"."テーブル名"."フィールド名")にはNULLは挿入できません。 , 失敗しました::行1」
プログラムをチェックすると確かに、Empty値を入れてInsertしていましたが、9iでは0に自動的に変換されて登録されていました。(フィールドタイプはNumber(1))
これは、プログラムのほうをEmpty→0にすべて変更しなければならないでしょうか?

それから、このほかにも9iから10gに変更するにあたって注意する点はあるでしょうか?
Oracle社のページやネットで調べたのですが、よくわからなかったので、わかりやすいページや書籍など教えてもらえると助かります。

A 回答 (3件)

私は、8iから10gに移行しました。

(アプリVB)
特に更新系でも動作しました。
ProCとかの場合コンパイルオプションでキャラクタのタイプでV6CHARとかを指定すると。古いキャラクタの動作をさせる(Varcharを使用しない)をわざと指定したりしますけど。
まずは項目属性はどうなってますか。NotNullになってませんか10g側の定義は。
(sqlplusでdesc テーブル名;)
あとは初期化パラメータも確認してみましたか。
    • good
    • 0
この回答へのお礼

ありがとうございます。
>NotNullになってませんか10g側の定義は
なっています。
9iのときからNotNullなのですが、9iでは自動的に0に置き換えられてエラーが出なかったのですが、
10gではエラーになってしまいます。
10gの動作のほうが正しい気がしますので、やはりアプリを修正しなければならないかも。

初期化パラメータというのは知りませんでした。調べてみます。

お礼日時:2006/06/27 10:34

以下のことを確認してください。


・テーブルの定義が同じということですが、  USER_TAB_COLUMNSで確認されました?
 (誰かがこっそりと直接ALTER TABLE流してたりなど)
・BEFORE INSERTのTRIGGERとかないですか?
    • good
    • 0
この回答へのお礼

ありがとうございます。
作業は自分のパソコンでスタンドアロンで行っていますし、その作業の間ずっと机にいたので、
誰かがこっそりいじった可能性は低いですが、
USER_TAB_COLUMNS確認してみます。

お礼日時:2006/06/27 10:25

9iから10gへの移行の注意点は分かりませんが、



INSERTのエラーについては、
テーブルの定義はまったく一緒でしょうか?
テーブルを作成するときに、省略時にデフォルトを設定できるオプションがあります。
また、そのオプションは後からでも追加できます。
9iでは、デフォルトオプションがついていて、10gのテーブル作成時には忘れていたということはありませんか?
    • good
    • 0
この回答へのお礼

ありがとうございます。
テーブルの定義もアプリケーションもまったく同じなのです。
9iで使用していたテーブル作成のプログラムをそのまま実行しただけなので。
9iのSql*Plusで、あえてNULL禁止項目になにも指定せずINSERTを実行してみたら、エラーになりました。
だから本来なら、エラーになるのが正しいのかもしれませんが。
アプリケーションのプログラムではバインド配列でINSERTしているのでその辺の影響でしょうか???

Oracle社のHPでみつけた資料によると、やはり9iから10gへの移行では特にアプリの変更はいらないようですね。

お礼日時:2006/06/26 14:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!