ACCESSからORACLEにDBを移行する際、
ORACLE上で、ACCESSのオートナンバー型が使えないのですが、
ORACLEでこのような機能はないのでしょうか?
よろしくお願いします。

A 回答 (3件)

追加時に、データに番号を付ける場合


・sequence を使う

検索時結果に、番号を付ける場合
・select 文で、検索対象項目に ROW_IDを使う
#テーブルの項目以外にこの項目を使うとナンバリング
#してくれます。
#決して更新時には使わないでください
    • good
    • 0

自動的にやるなら、トリガーを使うとよさそうです。


作成し管理する手間はありますが、この方法ならよいのではないでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございます。
トリガーでやってみます。

お礼日時:-0001/11/30 00:00

ACCESSのオートナンバー型がわからないのですが、感じからして自動的に番号をつけるというものでしょうか。


それならばOracleにはsequenceというものがあります。sequenceはcreate sequence文で作成できます。

この回答への補足

回答いただいて、ありがとうございます。
ACCESSのオートナンバー型というのは、データを追加したに自動的に採番される機能です。
sequenceでは、INSERT文でデータの追加を行わなければいけませんよね?
INSERT文を使わずに、自動採番してくれる方法を知りませんか?

補足日時:2000/12/06 13:42
    • good
    • 0

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

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QDB2 9とOracle10g なぜDB2はマイナーなの?

DB2がマイナーとは言い過ぎだとは思いますが、Oracleと
DB2を比較したとき、機能はほぼ互角、対象としている
プラットホームもほぼ同じだと思います。

しかし名前が薄いのかOracleの影に隠れてしまっている
ような感じがします。ちなみにうちの会社はOracleと
MS SQLを使っていますが、なぜかDB2は使っていません。

なぜ機能がいいのにDB2は影がうすいんでしょう?

Aベストアンサー

>プラットホームもほぼ同じだと思います。

DB2は、PC~メインフレームまでを対象。
オラクルは、PC~サーバクラスを対象。
MSSQLは、Windowsサーバを対象。

DB2がサポートするプラットフォームは非常に広いです。
ただし、プラットフォームごとにクセがあり、同一製品と考えるのには、ちょっと無理があります。

Windowsサーバやunixサーバクラスだと、オラクルが圧倒的シェアを持っており、技術者の数もノウハウも
シェアに比例して多いわけで、これを覆すだけのセールスポイントがDB2には、見つからないから・・としか言えません。

例えば、IBMメインフレームユーザが、ダウンサイジングをするようなケースだと、サーバ上のDB2を
使うケースは多いように思います。

QAccessのオートナンバー取得

皆さんよろしくお願いします。

Access97を使用して、例)営業の訪問日報を作成しようと思います。
親フォームには、連番(オートナンバー型)と活動日(規定値にDate()を設定)の
二個のフィールド。
子フォームは、親の連番とリンクした番号・訪問先名・訪問時間・
活動内容とします。

フォームを開くときイベントで DoCmd.GoToRecord , , acNewRecを設定。
親フォームは、連番と活動日が自動で入るので更新する必要がないので
子フォームにフォーカスを移すが、親でイベントが発生しないため
連番が更新されません。
質問)親フォームでフィールドを更新せず、子フォームを入力してとき
オートナンバーを取得する方法を教えてください。

上手に質問がかけませんでしたが、よろしくお願いします。

Aベストアンサー

『活動日』への既定値を廃止し、代わりに「値の代入」(と「レコードの保存」)とするのが
よいのではないでしょうか。

「値の代入」を行うイベントとしては、「レコードの移動時」か、子フォームの「フォーカス
取得時」辺りが無難かと思います。
但し、一長一短がありますので、当該日報の使い勝手としてどちらがよいか見極める
必要があります。
※ユーザーが行う作業を追加してもよいなら、コマンドボタンのクリックで行うのが
  ベストかと思います。

<レコード移動時で対応した場合の難点>
 新規レコードへの移動と同時にレコードが保存されてしまうので、
 そのレコードが不要だった場合、削除してやる必要がある。
 (なお、オートナンバーの都合上、削除をするとその分は欠番に
  なります:
  削除後、次の追加前に、メニューで「ツール(T)→データベース
  ユーティリティ(D)→最適化(C)」を選ぶなどして最適化すれば、
  次回追加時の欠番は回避可能)

<サブフォームのフォーカス取得時で対応した場合の難点>
 サブフォームにフォーカスがある状態で、親フォームのレコード
 セレクタや移動ボタン(→フォーム最下にあるレコード番号を表示
 する場所とその両脇に並んだボタン)で移動すると、コントロール
 の移動がないため、「フォーカス取得時」イベントが発生しない。


以下、レコード移動時の場合です(本体部分の4行は、どのイベント
に割り当てた場合でも同じですが):

Private Sub Form_Current()

  '新規レコード時のみ、今日の日付を入力してレコードを保存
  If Me.NewRecord Then
    日付 = Date()
    RunCommand acCmdSaveRecord
  End If

End Sub

『活動日』への既定値を廃止し、代わりに「値の代入」(と「レコードの保存」)とするのが
よいのではないでしょうか。

「値の代入」を行うイベントとしては、「レコードの移動時」か、子フォームの「フォーカス
取得時」辺りが無難かと思います。
但し、一長一短がありますので、当該日報の使い勝手としてどちらがよいか見極める
必要があります。
※ユーザーが行う作業を追加してもよいなら、コマンドボタンのクリックで行うのが
  ベストかと思います。

<レコード移動時で対応した場合の難点>
 新...続きを読む

Qaccess2000 オートナンバーでマイナス??

こんにちは。レプリケーションでデータを追加していると、-158694322とかという番号がオートナンバーで出てきます。特に大きな問題は無いとは思うのですが、主キーを置いているところなので怖いです。一度、主キーを変えてオートナンバーの番号をそろえてみたのですが、その後データを追加するとまたマイナスや非常に大きな番号が出てしまいます。何か対処法・問題点等ありませんでしょうか?

Aベストアンサー

アオートナンバーは実質ロング型と同じなので、
-2147483648~2147483647の任意の値を取ります。
通常は1から順に付けられます。

しかしレプリケーションの場合は、同じテーブルに複数のユーザがデータを追加する可能性があるので値が重複しないように乱数が使われます。
もし、それでも重複した場合はレプリケーションの同期の時に片方のデータが捨てられます。

Qaccess2007のオートナンバーについて

access2007のオートナンバーについて

こんにちは、さっそくですが質問させていただきます。
accessの勉強を始めた者ですが、
オートナンバーを指定したフィールドと、その他の必要な項目の
フィールドから成るテーブルを作成して、
オートナンバー1~3までのレコードを入力して、
オートナンバー3のレコードを削除した時、
そのあとで、レコードを追加すると、
オートナンバー4のレコードが作成されるのですが、
このレコードをオートナンバー3のレコードとして、
作成することはできるのでしょうか?

そのような設定ができろのかどうか、もしできるのであれば、
その方法や、参考になるサイトなど、なにぶん初心者ですので
教えていただけないでしょうか。
よろしくお願いします。

Aベストアンサー

いくつかの方法があります。
(1)
質問の末尾の場合。
あらかじめ、リレーションが張られて
いる場合は一旦リレーションを
削除します。
質問のように最後のレコードの場合、
テーブルをデザインビューにし、
オートナンバーのフィールドを
数値型に変更し、保存します。
次に新しいフィールドに別名で
オートナンバーを登録し、保存します。
テーブルを開いてみます。データが
思い通りになっていたら、数値型の
フィールドを削除し、オートナンバー
のフィールド名を必要な名前に変更し、
保存します。
必要ならば、リレーションを張りなおします。

(2)
そのほかいろいろな場合の方法がありますが、
以下に例とサイトがあります。参考にしてください。

http://oshiete1.watch.impress.co.jp/qa5734176.html

QAccessのデータをOracleに移行したい

AccessのデータをExcel(csv)にエクスポートして、それをSQL Loderでオラクルに移せると聞いたのですが、
具体的にはどんな感じで行うのでしょうか?

Access2000
Oracle9i
RedHatLinux7.2
です。
よろしくお願いします。

Aベストアンサー

コマンドプロンプトにて、

SQLLDR Orale接続文字列 CONTROL=コントロールファイル名 DATA=データファイル名

と入力します。

【データファイル(a.dat)】
001,あああ
002,いいい

【コントロールファイル(a.ctl)】
OPTIONS (
, ERRORS=99999
, ROWS=1000
)
Load Data
TRUNCATE
INTO TABLE <テーブル名>
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED '\n'
TRAILING NULLCOLS
(
ID,
NAME
)

こんな感じです。


このカテゴリの人気Q&Aランキング

おすすめ情報