基于this example,我创建了这段代码:
DECLARE
new_employee_id INTEGER;
BEGIN
SELECT MAX(EMP_ID) + 1 INTO new_employee_id FROM EMPLOYEE;
EXECUTE IMMEDIATE 'CREATE OR REPLACE SEQUENCE primary_key_seq START WITH ' || new_employee_id || ' INCREMENT BY 1';
END;
/
OBS:也许使用一个序列来自动递增表格的主键并没有多大意义,但这是一次学校练习,而这正是我们应该做的,所以请忽略这方面。
这是我的错误: 线路错误1 ORA-00922:缺少或无效选项 ORA-06512:第5行
可能出现什么问题?
答案 0 :(得分:1)
创建序列命令中没有REPLACE检查documentation(这总是一个好主意; - )
应该是
DECLARE
new_employee_id INTEGER;
BEGIN
SELECT MAX(EMP_ID) + 1 INTO new_employee_id FROM EMPLOYEE;
EXECUTE IMMEDIATE 'CREATE SEQUENCE primary_key_seq START WITH ' || new_employee_id || ' INCREMENT BY 1';
END;
/
答案 1 :(得分:1)
没有CREATE OR REPLACE SEQUENCE选项,因此如果您需要先删除它,则必须使用CREATE SEQUENCE语句和DROP语句。
DECLARE
new_employee_id INTEGER;
BEGIN
SELECT MAX(EMP_ID) + 1 INTO new_employee_id FROM EMPLOYEE;
EXECUTE IMMEDIATE 'CREATE SEQUENCE primary_key_seq START WITH ' || new_employee_id || ' INCREMENT BY 1';
END;
/
答案 2 :(得分:0)
这个问题引出了另一个问题 - 为什么你想要删除并重新添加一个序列?你永远不需要这样做。创建序列一次:
CREATE SEQUENCE PRIMARY_KEY_SEQ
MINVALUE 1
MAXVALUE 9999999999999999999999999999
START WITH 1
INCREMENT BY 1
NOCACHE;
然后,在您的代码中使用:
DECLARE
new_employee_id INTEGER;
BEGIN
new_employee_id := PRIMARY_KEY_SEQ.NEXTVAL;
INSERT INTO SOME_TABLE_MAYBE_EMPLOYEES
(ID, WHATEVER, WHATEVER_ELSE)
VALUES
(new_employee_id, 'WHATEVER', 'WHATEVER_ELSE');
END;
序列的整个目的是提供独特的非重复值。走出桌子,抓住MAX(ID),并重新创建从那里开始的序列,从序列的使用方式来看,有点倒退。创建一个序列,然后多次使用它。
希望这有帮助。
分享并享受。