こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Olacle Database 9iと10gの違い

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社のページやネットで調べたのですが、よくわからなかったので、わかりやすいページや書籍など教えてもらえると助かります。

投稿日時 - 2006-06-26 11:11:07

QNo.2238872

困ってます

質問者が選んだベストアンサー

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

投稿日時 - 2006-06-26 18:16:26

お礼

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

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

投稿日時 - 2006-06-27 10:34:50

ANo.3

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

以下のことを確認してください。
・テーブルの定義が同じということですが、  USER_TAB_COLUMNSで確認されました?
 (誰かがこっそりと直接ALTER TABLE流してたりなど)
・BEFORE INSERTのTRIGGERとかないですか?

投稿日時 - 2006-06-26 17:26:58

お礼

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

投稿日時 - 2006-06-27 10:25:40

ANo.1

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

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

投稿日時 - 2006-06-26 11:52:25

お礼

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

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

投稿日時 - 2006-06-26 14:26:44