• 締切済み
  • 暇なときにでも

Oracle:Oracleシーケンスとは?

Oracleシーケンスとは何者なのでしょうか? なにやら番号のようなものですよねえ・・・たぶん ということで以下について教えて下さい。 1.シーケンスとは何ですか? 2.Oracleシーケンスとは何ですか? 3.どのようにOracleシーケンスを取得するのですか? 以上、宜しくお願いいたします。

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

  • 回答数4
  • 閲覧数1792
  • ありがとう数8

みんなの回答

  • 回答No.4
  • riezo
  • ベストアンサー率0% (0/0)

こんにちは。 3. の質問に関してですが、sequence の今の値を取得するには currval を使用します。次の値を取るには nextval を使います。 Oracle 関係の書籍がたくさん出ているので一度読まれてはいかがでしょうか。基本的なことなのでどの本にも載っていると思います。 ちなみに、sequence は初期値、増分も設定できます。

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

質問者からのお礼

ご回答ありがとうございます。 この質問を載せた後にがさごそ書籍を見渡してみたところriezoさんのご回答などがごにょごにょと記載されている ものを発見しました。便利なものがあるのだなあと今更ですが思ってしまいました。

関連するQ&A

  • oracleのシーケンスについて

    こんにちは。oracleのシーケンスについて教えてください。 次のようなシーケンスを作成します。 CREATE SEQUENCE SQC_TEST INCREMENT BY 1 START WITH 1 MAXVALUE 999999 MINVALUE 1 CASHE 20 CYCLE / この時、キャッシュ分の20という値は、いつどこでクリア?されるのか知りたいのです。 一番最初はシーケンスをクリエイトした時にキャッシュが20確保されると思うのですが、次にキャッシュが確保されるタイミングっていつなんでしょう? 最初の20を使い果たした時?それともシーケンスを作成してあるインスタンスをリブートした時?? というのは、設定したシーケンスが、実際発番していないのに一日ごとに20ずつカウントされていってるので原因をつきとめたいのです。 とりあえずはNOCACHEに設定してありますが、原因がわかれば、と思い質問させていただきました。 何かアドバイスいただけたらと思います。宜しくお願いいたします。

  • oracle8iでのシーケンス作成

    こんにちは。教えてください。 oracleのシーケンスなんですが、シーケンスを作成するときに cycleでmax値を超えると値が元に戻るっていうのがあると思うのですが、 それと同様に、たとえば2001年から2002年に変わったタイミングで シーケンスの値を1に戻す、という設定方法はあるのでしょうか。 よろしくご教授ください。

  • oracle シーケンスの欠番を確認したい

    いつもお世話になります。 oracleのシーケンスの欠番を確認したいのですが、以下のようにサービス、インスタンスの再起動を試してみたのですが欠番はおきませんでした。 ・サービスの再起動 コントロールパネルから、サービスを開いて、「OracleServiceXE」、「OracleXETNSListener」の再起動。 シーケンスをselectした結果、欠番確認できず。 ・インスタンスの再起動 コマンドプロンプトを起動し、sqlplusから、sysdbaでoracleに接続。 shutdown、startupコマンドを行い、インスタンスを再起動。 シーケンスをselectした結果、欠番確認できず。 インスタンスの再起動を行えば欠番がおきる、というのをサイトで見たのですが、欠番は起きませんでした。なぜ起きないのでしょうか。 何か手順に不備があるのでしょうか。 alter system文による欠番は確認しています。 しかし、意図的にこのコマンドを発行しなければよいので、確認したいのは、通常運用時、データベースが起因してシーケンスの欠番が発生してしまう、ということです。 再起動などは普通に行うと思うので、その際に欠番が発生することを確認したいのです。 宜しくお願いします。 oracle:Oracle Database 11g Express Edition Release 11.2.0.2.0 OS:Windows Vista Home Promium 64bit

  • 回答No.3
  • paz777
  • ベストアンサー率47% (77/163)

こんにちは。 補足です。 過去にOracleシーケンスの掲示がありましたので、 一度参考にしてみて下さい。 ではでは・・・

参考URL:
http://www.okweb.ne.jp/kotaeru.php3?q=16747

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

質問者からのお礼

補足ありがとうございます。 ACCESSにはオートナンバー型というものがあるんですね!勉強になります。

  • 回答No.2
  • sh0g0
  • ベストアンサー率40% (2/5)

シーケンスオブジェクトはロールバックの対象にはなりません。どうしても欠番を出したくないときはよく考えてデータベースを更新する必要があります。

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

質問者からのお礼

ご回答ありがとうございます。 ロールバックの対象にならないということを生かせる場面では非常に有効的ですよね!

  • 回答No.1
  • mfuku
  • ベストアンサー率50% (173/345)

「順序」のことを言います。 平たく言えば、Oracleが用意しているカウンターです。 一意に採番するコードを生成する際などに使用します。 CREATE SEQUENCE文で「順序(シーケンス)」を生成し、作成(CREATE)されたシーケンスオブジェクトから、新たな値を取り出すことが可能になります。

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

質問者からのお礼

ご回答ありがとうございます。 なるほど、確かにSQL*PLUSでCREATE SEQUENCE~を作成すると 順序が作成されましたということをいわれますね。 Oracleが用意しているカウンターというのは非常にわかりやすい表現でした。

関連するQ&A

  • oracle sequence

    oracleのシーケンスでdual表からselect文のnextvalで取得したものをインサート したいのですが、ループ内で上記処理を複数回行ったときに、値が一回目以降 更新されずに困っています。 例) for (i=0;i < 5){ (1)セレクト文発行しシーケンスを取得。 (2)取得したシーケンスを変数にセット (3)インサート実行(主キーに取得したシーケンスをセット) } こんな感じで実行したときに、はじめはシーケンスが+1されますが、 それ以降シーケンスが増加しません。そのため、重複エラーが発生してしまいます。。。 どのように対処したらよいのかまったく見当がつきません。 大変申し訳ないのですが、ご教示いただきたくよろしくお願い申し上げます。

  • トリガーとシーケンスについて

    DBはOracle9i(Ver9.2.0.1かな?)です。 テスト環境から本番環境にデータ移行する際に テーブルも変更を加えました。 すると変更を加えたテーブルに関連するトリガーが未コンパイル状態になってしまいました。 仕方なく、再コンパイルするとトリガーに記述のあるシーケンスの最終番号が若干ずれていました。 コンパイルすることによってずれることがあるのでしょうか? シーケンスは初期化されたわけではなく、若干ずれてるだけです。 そのシーケンスを使用して登録処理を行っているので一意制約違反がでまくりです。 どなたかアドバイスお願いします。

  • 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"));

  • MySQLでシーケンス番号の前後数を知りたい

    user_table ---------------------------- id | group_id | sequence| name | ---------------------------- 1 | 1 | 1 | emi | ---------------------------- 2 | 1 | 2 | shun | ---------------------------- 3 | 2 | 1 | yumi | ---------------------------- 4 | 1 | 5 | jo | … group_idごとにシーケンス番号(グループ内のユニーク番号)を振っています。 shun(group_id=1,sequence=2)のページでシーケンス番号の前後を取りたいのですがどうすればいいでしょうか? すでに辞めたユーザもいるためシーケンス番号は必ず連続しているとは限らず、抜けている場合もあります。 例として、shun(group_id=1,sequence=2)の前後を取る場合はemiとjoのシーケンス番号を取得したいのです。 下記で出来ましたがサブクエリなしでもできそうなのとあまりきれいでないのでご教示お願いいたします。 select (select min(sequence) from t_files where album_id=1 and sequence>2) next,( select min(sequence) prev from t_files where album_id=1 and sequence<2) prev;

    • ベストアンサー
    • MySQL
  • SQLServerでOracleシーケンスのような機構を実現するには

    いつもお世話になります。 SQLServerで自動採番される仕組みで何かいい方法がないかどうか悩んでいます。 主キーとなる項目に自動採番された値を、アプリケーションでセットした上で、DBに追加する仕組みを考えています。 OracleではSequenceのnextvalなどを使用すれば、番号を自動採番したものを取得することが可能ですが、 SQLServerでこのような仕組みを実現するために何か良い方法はありませんでしょうか? (追加先のDBはSQLServerではなく、自動採番等の機能も無いため、追加する前にアプリケーションでセットする必要がある。) 今までOracleしか使用したことが無く、SQLServerは初めてなので、ご教授頂きたく投稿しました。 よろしくお願いします。 SQLServerは2005を使用しています。

  • DBFlute でシーケンス値取得

    現在 DBFlute + Oracle で、学習を進めているのですが、 シーケンス(Sequence)についてわからない点がございます。 sequenceDefinitionMap.dfprop ファイルに、テーブルにひもづく Sequenceを1つ設定できるのはわかったのですが(主キー用など)、 1テーブルに対して複数のSequenceを設定できないのでしょうか。 主キーだけでなく、その他のカラムにもシーケンス値を 利用したい場合はどのように記述するのでしょうか。 (まさか外だしSQLにしないといけない?) ご存知の方がいらっしゃれば、ご教示よろしくお願いいたします。

  • oracleのエクスポートについて

    こんにちわ 質問なんですが、oracleのデータを他のマシンに移行するためにテーブルをエクスポートしようと思うのですが、エクスポートする際、シーケンスもいっしょにエクスポートすることは可能なのでしょうか?

  • oracle bronzeについて

    現在、oracle bronzeを取得しようと思っております。 質問ですが、 oracle 11g SQL基礎I(1Z0-051)を取得し、 oracle 10g DBA1(1Z0-041)を取得した場合は、 oracle 10g bronzeを取得したことになるのでしょうか? どなたかご回答頂けますでしょうか。

  • 年度毎にシーケンスの初期化?

    こんにちは あるプロジェクトでIDの連番を生成していますが、 年度毎に1から振り直します。 例:2009_001,2009_002... 2010_001... Oracleの順序(シーケンス)を使うとしたら、年度毎にどうやって順序を初期化するのでしょうか? そもそもこの場合、開発では順序を利用するべきではないでしょうか? よろしくお願いします。

  • シーケンス

    仕事の必要性からシーケンスの勉強し始めている者です。 今、私が作りたいシーケンスが、 480分 ON  → 60分 OFF を繰り返すシーケンスです。 タイマー範囲内の時間であれば、タイマーで良いのですが、 範囲外の長い時間でON OFF したい時ってどうしたら良いでしょうか? 知識のあるかた助けてください。

専門家に質問してみよう