2

私はちょうど Oracle を学んでいて、トリガーとシーケンスの概念を理解しています。私が見つけられないように見えるのは、それらが SqlServer Identity 設定と同様の自動インクリメント方式でどのように一緒に使用されるかです。非常に単純な例では、EmployeeID (PK)、FirstName、LastName の 3 つのフィールド (すべて必須) を持つ Employees というテーブルがあります。ID フィールドの次の値を取得するシーケンスを作成しました。次に、次のようなトリガーを作成しました。

CREATE OR REPLACE TRIGGER MyFirstTrigger
 BEFORE INSERT ON EMPLOYEES  FOR EACH ROW
BEGIN
   Select EMP_SEQ.NextVal into :NEW.EMPLOYEEID from dual;
END MyFirstTrigger;
/

しかし、これは挿入ステートメントでどのように使用されるのでしょうか? FirstName と LastName の値のみを含む挿入ステートメントは、「十分な値がありません」という理由で失敗します (ちなみに、私は Toad を使用しています)。EMP_SEQ.NextVal を挿入ステートメントの最初の値として含める必要がある場合、トリガーのポイントは何ですか?

うまくいけば、これは理にかなっています。前もって感謝します。

4

2 に答える 2

4

挿入から ID を省略できますが、ターゲット列を指定する必要があります。

insert into employees (firstname, lastname) values ('Tony', 'Andrews');

本番コードでは、列リストなしで挿入を行うべきではありません。ただし、D 列に NULL を渡すだけでよい場合は、次のようにします。

insert into employees values (null, 'Tony', 'Andrews');
于 2010-10-19T12:51:28.087 に答える
0

そうでない場合、これは機能するはずです。その理由と使用法について説明します。

INSERT INTO EMPLOYEES (FirstName, LastName) VALUES ('Name', 'LastName')

そして確かにあなたはこれを行うことができます

   INSERT INTO EMPLOYEES (EMPLOYEEID , FirstName, LastName) VALUES (null, 'Name', 'LastName')
于 2010-10-19T12:51:05.037 に答える