DECLARE
v_emp_id NUMBER;
empid NUMBER;
stmt VARCHAR2(1000);
BEGIN
SELECT MAX(emp_id) + 1 INTO v_emp_id FROM employees;
BEGIN
dbms_output.put_line(v_emp_id);
stmt := 'CREATE SEQUENCE emp_seq start with ' ||v_emp_id|| ' increment by 1 NOCYCLE';
EXECUTE IMMEDIATE stmt;
COMMIT;
END;
insert into emp_new select emp_seq.nextval,empname from (select * from employee where active = 0);
dbms_output.put_line(empid);
END;
/
上記手順実行時に、私は次のエラー ORA-06550を取得し、存在しません:行13、列10: PL/SQL:ORA-02289:シーケンスが存在しません ORA-06550:行13、列3: PL/SQL:SQL文が無視されます。を作成および使用シーケンスをOracleストアドプロシージャに - シーケンス
ただし、以下の手順を実行すると正常に実行され、順序が作成されます。
DECLARE
v_emp_id NUMBER;
empid NUMBER;
stmt VARCHAR2(1000);
BEGIN
SELECT MAX(emp_id) + 1 INTO v_emp_id FROM employees;
BEGIN
dbms_output.put_line(v_emp_id);
stmt := 'CREATE SEQUENCE emp_seq start with ' ||v_emp_id|| ' increment by 1 NOCYCLE';
EXECUTE IMMEDIATE stmt;
COMMIT;
END;
dbms_output.put_line(empid);
END;
/
感謝:)私はselect文と挿入で配列を使用していますあなたの配列をいうFUNCTION/PROCEDURE/PACKAGEを.... REPLACE。どのようにそれを行う上の任意のアイデア?申し訳ありませんが、私は非常にほとんどのアイデアがオラクルの手続きを持っています – Doubtful
すぐに実行する 'SELECT emp_seq.nextval FROM dual' INTO empid;これは、empidにselectおよびreturnの値で新しく作成されたシーケンスを使用する方法です。 – Kacper
employeeからemp_new select(emp_seq.nextval、empname)に挿入します。 – Doubtful