質問: 皆様、いつもお世話になっております。 ただいま私はOracle DBA 12cの勉強をしておりまして、教材に乗っているような社員番号を主キーとした行を生成したいと思っています。 仮に ``` CREATE TABLE EMP( EMPNO NUMBER(4) DEFAULT 1000, NAME VARCHAR2(10), PRIMARY KEY(EMPNO) ); ``` というテーブルを作り、INSERT INTO EMPをする度に自動的に EMPNOが 1000 1001 1002 1003 1004 となるようにしたいのですが、どのようなSQL文を打てば実現できるのでしょうか? 他の型から「rpad(empno,4)+1」というシーケンスを使えばできるはず、と教わって ``` INSERT INTO EMP (EMPNO, NAME) VALUES (Rpad(EMPNO,4)+1, 'YAMADA TARO'); ``` とやってみたのですが、 INSERT INTO EMP (EMPNO, NAME) VALUES (Rpad(EMPNO,4)+1, 'YAMADA TARO') ERROR at line 1: ORA-00984: column not allowed here というエラーが起きてしまっています。 ご指導とアドバイスをよろしくお願いします。
回答: ``` INSERT INTO EMP (EMPNO, NAME) VALUES ((select max(EMPNO) from EMP)+1, 'YAMADA TARO'); ``` とやればまあできなくもないのですが、毎度毎度EMPNOの最大値を検索して1足して、ってやるのは レコード数が多くなると激しく効率悪いので、シーケンスの使用もご検討ください。 あと私の示したコードではテーブルにレコードがないとうまく動きません:)