• ベストアンサー
  • すぐに回答を!

Oracleのシーケンスありのテーブル作成について

Oracleのテーブルを作るのに、ある列を自動で「全体の通し番号」みたいなユニーク(一意)な番号を振りたいく、 シーケンス(sequence)を作成しテーブルを作ろうとしているのですがうまくいきません。 どこがわるいのでしょうか。 create sequence "yamaaf_seq"; CREATE TABLE TBL_AFFILIATE_SESS( UNIQ_ID NUMBER(11,0) DEFAULT nextval('yamaaf_seq') NOT NULL, ORG_CODE VARCHAR2(64) NOT NULL, primary key("UNIQ_ID"));

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数613
  • ありがとう数0

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

  • ベストアンサー
  • 回答No.1

oracleの場合、シーケンスの払い出しはセッション単位に行います。 テーブルのcreate時にデフォルト値に指定は出来ないようです。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • テーブル作成時にエラー?

    こんにちは。 以下のような環境で操作を行っています。 RedHatLinux9.0 PostgreSQL 8.0.3 テーブル作成時に次のようなメッセージが出力され、テーブルを作成することができません。 NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "PK_SIKYO" for table "TM_SIKYO" ちなみに実行したSQL文は次の通りです。 CREATE TABLE "TOUSHIN"."TM_SIKYO" ( "SHIKYO_CD" int4 NOT NULL DEFAULT nextval('"TOUSHIN"."TM_SIKYO_SHIKYO_CD_seq"'::text), "SHIKYO_NM" varchar(50), "SHIKYO_RNM" varchar(50), "SHOW_FLAG" bool, "UNUSE_FLAG" bool, "CREATE_DATE" timestamp DEFAULT ('now'::text)::timestamp(6) with time zone, "CREATE_ID" varchar(10), "CHANGE_DATE" timestamp DEFAULT ('now'::text)::timestamp(6) with time zone, "CHANGE_ID" varchar(10), CONSTRAINT "PK_SIKYO" PRIMARY KEY ("SHIKYO_CD") ) WITHOUT OIDS; SQL文はWindows版のPostgreSQLから作成したものを、そのままコピーして利用しました。 プライマリーキーが正しく設定できていないようなメッセージだと思うのですが、対処法など詳しいことが分からずに困っています。 Windows版から出力したSQL文なので、SQL文に間違いがありそうな感じでもないですし、一体何が原因なのでしょうか?

  • usersテーブルの構成カラムについて

    MySQLバージョン4.1.16を使用しています。 このジャンルでお願いします。 よく全ての基本となるusersテーブル(IDとパスワードを入れるユーザの基本テーブル) があると思うのですが、それを構成するカラムはどのような感じにするのが良いのでしょうか? 自分は、 CREATE TABLE `users` ( `user_id` varchar(16), `password` varchar(255) default NULL, `col1` varchar(255) NOT NULL, `col2` varchar(255) NOT NULL, PRIMARY KEY (`user_id`), ) ENGINE=InnoDB; このように代替キー(連番)を使わずにuser_idを主キー(unique)にして構成します。 理由としては、uniqueな列があるなら、わざわざ連番を割り当てる必要もないし、 他のテーブルがuser_idを外部キーとして持った時に、その表の外部キーの列が 数字であるよりも見やすいかなと思ったからです。 ただ一般的に出まわっているPHPフレームワークなどのテーブル構成ではusersテーブルというか ほとんどのテーブルに連番を使っている例があります。 次のusersテーブルは、PHPフレームワークのCakePHPで使われるusersテーブルの構成の例で、 連番を使用しています。 CREATE TABLE `users` ( `id` int(11) NOT NULL auto_increment, `username` varchar(255) collate utf8_unicode_ci default NULL, `password` varchar(255) collate utf8_unicode_ci default NULL, `group_id` int(11) NOT NULL, `disabled` tinyint(1) NOT NULL, `created` datetime default NULL, `modified` datetime default NULL, PRIMARY KEY (`id`), KEY `group_id` (`group_id`), KEY `disabled` (`disabled`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 使用状況によって、どちらが良い悪いというのは変わるのでしょうけど 基本的にusersテーブルというのはどのような構成にすべきなのでしょうか? ちなみに自分は連番は○○_seqというカラム名にしてます(ただこれも 一般的には○○idを連番にしてるケースが多いので、どうすべきか迷っています・・・)

    • ベストアンサー
    • MySQL
  • どうしてもこのクエリーがミスになる

    Webmin上からテーブルを作成しようとしたら、以下のようにエラーになりました。 テーブルを作成できませんでした : SQL create table `page` (`page_id` mediumint(10000) not null,`title` varchar(100) not null,`descrption` varchar(500) not null,`keywords` varchar(100) not null,`parent_id` mediumint(10000) not null,`page_seq` int(100) not null,`createdate` datetime not null default 'now()',`modifydate` datetime not null default 'now()') が失敗しました: Display width out of range for column 'page_id' (max = 255) page_id はmediumint(10000)にしてるのに、なぜ「column 'page_id' (max = 255)」と言われてしまうのか不思議です。 どなたかおわかりのかたいらっしゃいましたら、お教えいただければ幸いです

    • ベストアンサー
    • MySQL
  • Oracleでテーブルを作成する際に、インデクスの作成先を指定したい。

    以下のようにテーブルを作成しようとしてます。 CREATE TABLE TEST_USER.M_USER ( ID char(4), NAME varchar2(40) NOT NULL), CONSTRAINT PK_USER PRIMARY KEY(ID) ); さて、プライマリキーを定義しているので、インデクスが作成されるはずです。 この作成先のテーブルスペースを指定したいのですが、方法が解りません。 CREATE TABLEの紹介をしているサイトにものっていなくて、途方にくれています・・・。 CONSTRAINT句を使えばいいのでしょうか?

  • POSTGRESQLデフォルトのシーケンス値を強制

    以下の(2)(3)のaをデフォルトであるシーケンスの値を強制入力しエラーを回避する方法はありますか? create sequence testseq start 1; create table test(a int not null default nextval('testseq'), b int); --(1)成功 insert into test (b) values(0); --(2)エラー insert into test (a,b) values(null,0); --(3)エラー insert into test values(null,0);

  • インポートした時に[ _seq ]というテーブルが自動作成される

    お世話になっております。 MySQLのPHPMyAdminにてSQLをインポートすると、 まれに[ _seq ]というテーブルが自動作成される事があります。 構成として、 sequence int(11) Not Null auto_increment の1フィールドのみのテーブルです。 何故、このようなテーブルが発生するのでしょうか? また、インポートデータに問題はないのでしょうか? (インポート時にエラーは表示されません) どうぞ宜しくお願い致します。

  • PL/SQLでCREATE SEQUENCEの呼び出し

    いつも参考にさせていただいてます。 select文で取得した日付の年下2桁をもとに 順序を取得したいと思っています。 CREATE SEQUENCEは seq_id_04 seq_id_05 seq_id_06   :    というように年ごとに作成されてあります。 seq_id_yy.nextval yyを取得した年に置き換えて実行したいのですが、 なかなかうまくいきません。 初めてのPL/SQLのため説明文におかしな部分があったらすみません。 ご存知の方がいましたら、ぜひぜひご教授ください。

  • 同じ構成の2つのテーブルの更新について

    はじめまして、下のような2つの同じ構成のテーブルがあった場合に create table test1 ( key1 varchar(8) not null, key2 varchar(4) not null, key3 varchar(6) not null, key4 varchar(11) not null, suryo int(9), kingaku int(11), constraint test1_key primary key (key1,key2,key3,key4) ); create table test2 ( key1 varchar(8) not null, key2 varchar(4) not null, key3 varchar(6) not null, key4 varchar(11) not null, suryo int(9), kingaku int(11), constraint test2_key primary key (key1,key2,key3,key4) ); 10万件のtest1テーブルに 5件のtest2テーブルの内容をキー集計した結果を test1に反映するにはどうのようなSQL文を書けば、効率的なのでしょうか? 片方のテーブルはデータ量が多く、もう片方は数件の更新処理となります。 宜しくお願いいたします。 ・処理前 (test1テーブル) key1,key2,key3,key4,suryo,kingaku "20070521","1111","111111","11111111111",10,1000 "20070521","2222","222222","22222222222",5,5000 "20070521","3333","333333","33333333333",1, 100 (test2テーブル) key1,key2,key3,key4,suryo,kingaku "20070521","2222","222222","22222222222",10,30000 ↓ ・処理後 (test1テーブル) key1,key2,key3,key4,suryo,kingaku "20070521","1111","111111","11111111111",10,1000 "20070521","2222","222222","22222222222",15,35000 "20070521","3333","333333","33333333333",1, 100

    • ベストアンサー
    • MySQL
  • MySQLのテーブル設計で迷っています(桁数)

    MySQLのテーブル設計で迷っています。 クリエイト文のカッコの中は桁数を表しているのでしょうか?それともバイト数でしょうか?桁数であれば、それぞれの型で何桁まで設定できますでしょうか? int型のnoを18桁に変更したいのですが、調べているうちに迷ってしまいました。 型 バイト 最小値 最大値 TINYINT 1 -128 127 SMALLINT 2 -32768 32767 MEDIUMINT 3 -8388608 8388607 INT 4 -2147483648 2147483647 BIGINT 8 -9223372036854775808 9223372036854775807 CREATE TABLE `user` ( `no` int(8) unsigned NOT NULL auto_increment, `id` varchar(24) NOT NULL default '', `email` varchar(255) NOT NULL default '', `reg_date` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`no`) ) TYPE=MyISAM;

    • ベストアンサー
    • MySQL
  • AUTO_INCREMENTのあるテーブルにinsertできません(長文)

    mysql5.0.27(RedhatLinux 9)です。 属性のひとつがAUTO_INCREMENTになっているテーブルhogeに、データをinsertしたいのですが、「コラムの数が合致しない」というエラーで、insertできません。 Webをいろいろ漁って、AUTO_INCREMENTの属性は明示的に指定しないようだと理解しました。冗長で申し訳ないのですが、エラーが出た状態のものを、そのまま掲載させていただきます(テーブル名や属性名のみ変更しました)。 状態をまとめると、以下のようになります。 ・下記のテーブル定義で、テーブルは普通にcreateできた。 ・descで確認しても、ちゃんとテーブルはできているよう。 ・下記のinsert文で、その下のエラーメッセージが出て、データを登録できない。 ・どうみても、コラム数は合っている(と思う)。 ・下記のテーブル定義の属性数を適当に減らす(id, item1, item4, item6くらいにする)と、エラーが出ずデータがちゃんとinsertできる。 私はなにか、とんてもない勘違いをしているのでしょうか?かなりの時間試行錯誤しているのですが、一向にわかりません。。。 ===== テーブル定義 ===== CREATE TABLE hoge ( id MEDIUMINT UNSIGNED AUTO_INCREMENT NOT NULL, item1 VARCHAR (64) NOT NULL, item2 VARCHAR (64) NOT NULL, item3 VARCHAR (32) NOT NULL, item4 VARCHAR (64), item5 VARCHAR (64), item6 VARCHAR (16) NOT NULL, CONSTRAINT PK_HOGE PRIMARY KEY (id) ) type=innodb; CREATE INDEX IDX_HOGE_1 ON hoge(item1); CREATE INDEX IDX_HOGE_2 ON hoge(item2); CREATE INDEX IDX_HOGE_3 ON hoge(item3); CREATE INDEX IDX_HOGE_4 ON hoge(item4); CREATE INDEX IDX_HOGE_5 ON hoge(item6); ===== descの出力 ===== +---------------------+-----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------------+-----------------------+------+-----+---------+----------------+ | id | mediumint(8) unsigned | NO | PRI | NULL | auto_increment | | item1 | varchar(64) | NO | MUL | | | | item2 | varchar(64) | NO | MUL | | | | item3 | varchar(32) | NO | MUL | | | | item4 | varchar(64) | YES | MUL | NULL | | | item5 | varchar(64) | YES | | NULL | | | item6 | varchar(16) | NO | MUL | | | +---------------------+-----------------------+------+-----+---------+----------------+ 7 rows in set (0.00 sec) ===== insert文 ===== insert into hoge (item1, item2, item3, item4, item5, item6) values ( 'data1','data2', 'data3', 'data4', 'data5', 'data6'); ===== エラーメッセージ ===== ERROR 1136 (21S01) at line 1: Column count doesn't match value count at row 1 長文大変申し訳ありません。よろしくお願いします。