2

私はSQLとOracleが初めてなので、練習のために、タイピング学習セッションを追跡するために作成したダミーテーブルを作成しました(タイピングを学んだことがないため、今はそれを補っています)、これを使用してシーケンスを設定しましたOracle でのクエリ:

CREATE SEQUENCE seq_keyboard_learning
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10

私の意図は、id 列をインクリメントすることでしたが、新しい値を追加するたびに 1 から 5 にジャンプしました。完全を期すために、このテーブルを設定するときに使用したクエリの一部を次に示します。

CREATE TABLE keyboard_learning
(
emplid NUMBER CONSTRAINT emplid_pk PRIMARY KEY
,WPM NUMBER
,date_completed DATE
)

CREATE SEQUENCE seq_keyboard_learning
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10

INSERT INTO keyboard_learning (emplid,wpm,date_completed)
VALUES (seq_keyboard_learning.nextval,15,'12-JUN-2012')

UPDATE keyboard_learning 
SET emplid = 1
WHERE emplid = 4

ALTER TABLE keyboard_learning
ADD attempt VARCHAR2(45)

INSERT INTO keyboard_learning
VALUES (seq_keyboard_learning.nextval,26,'6-JUN-2012','ASDFJKL:',2)

4項ごとにインクリメントする代わりに、どうすれば調整できますか? ありがとう

4

1 に答える 1

3

ギャップ シーケンスがないことを確認することは、基本的に不可能です。シーケンスからの取得はアトミック操作であるため、レコードを挿入してエラーが発生した場合でも、シーケンスはインクリメントされることに注意してください。以下の例を参照してください。

キャッシュがあると、シーケンスが「失われる」こともあります。キャッシュに値 10 を指定すると、データベースはシーケンスから 10 をキャッシュします。2 行だけを挿入してデータベースをシャットダウンすると、残りの 8 行は破棄されます。注: Alex Poole による修正を加えて編集。

これが、シーケンスの動作の一部を理解するのに役立つことを願っています。

create table test
(id     number,
my_date date);

select seq.currval from dual;

insert into test
(id, my_date)
values (seq.nextval, 'foo'); -- will throw an exception

select seq.currval from dual;

結果は次のとおりです。

table TEST created. 
CURRVAL
-------
      1 


Error starting at line 31 in command: insert into test (id, my_date) values (seq.nextval, 'foo') Error report: SQL Error: ORA-01858: a non-numeric character was found where a numeric was expected
01858. 00000 -  "a non-numeric character was found where a numeric was expected"
*Cause:    The input data to be converted using a date format model was
           incorrect.  The input data did not contain a number where a number was
           required by the format model.
*Action:   Fix the input data or the date format model to make sure the
           elements match in number and type.  Then retry the operation. 
CURRVAL
-------
      2
于 2012-06-14T01:29:13.240 に答える