【发布时间】:2016-12-15 20:38:58
【问题描述】:
我正在将数据库从 MySql 迁移到 Oracle 数据库,使用 SQL developer 作为迁移接口。我是 Oracle 的新手,我不确定这是否需要在 Oracle 中使用触发器进行重写,或者在 Oracle 中使用自动增量(如果存在)。
生成自动增量的迁移脚本后,下面是生成的 MySQL 触发代码:
CREATE OR REPLACE TRIGGER Trigger_name BEFORE INSERT ON Table_name
FOR EACH ROW
DECLARE
v_newVal NUMBER(12) := 0;
v_incval NUMBER(12) := 0;
BEGIN
IF INSERTING AND :new.table_PK_id IS NULL THEN
SELECT sequence_name.NEXTVAL INTO v_newVal FROM DUAL;
IF v_newVal = 1 THEN
SELECT NVL(max(table_PK_id),0) INTO v_newVal FROM Table_name;
v_newVal := v_newVal + 1;
LOOP
EXIT WHEN v_incval>=v_newVal;
SELECT sequence_name.nextval INTO v_incval FROM dual;
END LOOP;
END IF;
:new.table_PK_id := v_newVal;
END IF;
END;
...这是在 Oracle 中生成的等效触发器:
CREATE OR REPLACE TRIGGER Trigger_name
BEFORE INSERT ON Table_name
FOR EACH ROW
BEGIN
SELECT sequence_name.nextval
INTO :new.table_PK_id
FROM dual;
END;
我应该在我的应用程序中使用 Oracle DDL 触发器代码,还是 Oracle 提供更好的东西?
【问题讨论】:
-
和这个问题类似,选择的答案可以解决你的问题:stackoverflow.com/a/11296469/212950
-
是的,我从你提供给我@MAbraham1 的链接中得到了解决方案,我的问题是,如果我使用第二个触发器,我在编写插入语句时不必提及 id,对吧?
-
如果可行,请不要忘记标记我提供的答案。只需单击它旁边的复选框。谢谢。
-
我在我的项目中使用第二个,因为我们没有使用 oracle 12c。我不能使用身份。
-
是的,第二个应该可以正常工作。
标签: java mysql sql oracle auto-increment