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運用中のALTER TABLE

運用中でアクセスがあるテーブルに
ALTER TABLEで項目を追加したいのですが
問題ありますでしょうか?
オラクル9iです。

宜しくお願い致します。

Aベストアンサー

(1)ALTER TABLE文は表ロックがかかります(自身なし(^^;)。
SELECT ~ FOR UPDATE NOWAITで実行するSQL文等があるとリソースビジー
(ORA-00054)が戻る場合があります。

(2)テーブルを変更することによっていろいろ(プロシージャなどが)
無効(INVALID)になる場合がありますので、オブジェクトの状態を確認
したほうが良いと思います。

(3) DEFAULT指定がALTER TABLE文にある場合、undo領域が圧迫
(領域不足)したり、ALTER TABLEがなかなか完了しなかったりします。
(私はコレでハマリました(^^;)

今のところ、思いつくのはコレだけですが、いずれにしろテストできる
環境で確認されたほうが良いと思います。

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を
使うケースは多いように思います。

QOracleのCreate Table 文のStorage句

お世話になります。

OracleのCreate Table 文のStorage句のNextの値を
変更したいのですが、できるのでしょうか?

Alter Table文で変更するのでしょうか?
手元にマニュアルが無く困っております。

よろしくお願いします。

Aベストアンサー

alter table テーブル名 storage ( next 変更後のサイズ );

だっけかな?

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

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

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

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

Qmysqlのalter table中のロックについてです。

mysqlのalter table中のロックについてです。


下記のように、alterでテーブルを再構築中に同じテーブルにinsertが実行された場合、
接続Bのinsertはブロックされるかと思うのですが、テーブルが大きくalterに時間がかかる場合、
タイムアウトなどは発生するのでしょうか。
またもし発生する場合、タイムアウト値の設定などの確認方法はあるのでしょうか。

1.接続A
 alter table table1 add columnB int(11) ;

2.接続B(接続Aのalter実行中)
 insert into table1(columnA) values('aaa');

Aベストアンサー

ロック待ち関連のパラメータは、
innodb_lock_wait_timeout
table_lock_wait_timeout
だと思うんですが、DDLでロックされているテーブルのロック待ちに関しては、上記パラメータが関係ないようでした。
私の設定値は、デフォルトの50(両方とも)

※確認方法
show variables like '%timeout%';


2パターン、やってみました。

セッション1
alter table table1 add primary key(c1); /* 20分間 */

セッション2
start transaction;
insert into a values (100000001); /* セッション1終了後、ロック解除 */
rollback;

セッション1
alter table table1 drop primary key; /* 10分経過 */

セッション2
lock tables table1 write; /* おそらく、セッション1終了後ロック解除するのでしょう */

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

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

Aベストアンサー

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

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

Qalter table で text が midiumtext になってしまう

当初作ったテーブル(テーブル名=test)では
col1 char(10) unique not null,
col2 text not null,
col3 text not null,
col4 text not null
だったのですが、col1だけをchar→varcharに変えたくて
alter table test modify col1 varchar(10) unique not null
としたところ、他のtext型項目が全てmidiumtextになってしまいました。

ひとつずつtextに直そうと
alter table test modify col2 text not null
を実行し次に
alter table test modify col3 text not null
とするとcol3はtextになるがcol2がまたmidiumtextになってしまいます。

midiumtextほどの容量は必要ないのでcol2~col4をtextに戻したいのですが、
どのようにすればよいのでしょうか。
ご教示願います。

宜しくお願い致します。

当初作ったテーブル(テーブル名=test)では
col1 char(10) unique not null,
col2 text not null,
col3 text not null,
col4 text not null
だったのですが、col1だけをchar→varcharに変えたくて
alter table test modify col1 varchar(10) unique not null
としたところ、他のtext型項目が全てmidiumtextになってしまいました。

ひとつずつtextに直そうと
alter table test modify col2 text not null
を実行し次に
alter table test modify col3 text not null
とするとcol3はtextになるがcol2...続きを読む

Aベストアンサー

UNIQUEは引き継がれるはずなので、changeをつかって
以下のようにしてみてはいかがでしょうか?

ALTER TABLE `test`
CHANGE `col1` `col1` VARCHAR(10) NOT NULL
,CHANGE `col2` `col2` TEXT NOT NULL
,CHANGE `col3` `col3` TEXT NOT NULL
,CHANGE `col4` `col4` TEXT NOT NULL

ただしMySQLのバージョンにもよるでしょうけど、
暗黙のフィールド定義変更がはたらいて手動による
型変更は意味がないかもしれません

参考URL:http://www.mysql.gr.jp/Manual/mysql-4.00.12/manual.ja_Reference.html#Silent_column_changes

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

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

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

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

Aベストアンサー

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

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

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

QALTER TABLE mytable CHANGE

mytableというテーブルのaカラムの型と名前を変更するのは
ALTER TABLE mytable CHANGE a new_a INT;
でできましたが、今度はnew_aをbにすると動時にTINYINT(4)にしたいのですが、SQLの文法が違うようだったので正しいものを教えてください。
ALTER TABLE mytable CHANGE new_a b TINYINT(4);
でなく、何なのですか?

Aベストアンサー

それで合っています。
(少なくともウチの4.0.23ではそれで変更できてます)

本当に文法ミスでのエラーでしょうか?
エラーの内容を確認してみてください。

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ランキング

おすすめ情報