如何使用自动增量列创建一个oracle表,这样每当插入exsisiting值时,它应该递增计数器,否则它应该插入一个新计数
例如,如果我有一个包含电话号码和状态的列,则应该有另一个名为counter的列,其中将显示自动增量功能
每当再次插入exoniting phonenumber时,计数器必须递增,如果插入新值,则counter应为该数字添加新的初始值
取决于您要如何插入数据 . 如果要同时插入多行,请尝试 MERGE 语句 . 加入电话号码,如果发现增加计数器列值,则将计数器设置为1 .
MERGE
如果要一次插入一行,则最好在执行插入的代码中完成 .
EDIT: 我没想到这一点 . 既然我是,我认为没有必要使用计数器列 . 如果您打算多次插入电话号码,为什么不必存储't you simply count each phone number? It doesn' .
你不能创建这样的表 .
但是,您可以将自己的逻辑添加到INSERT新行的位置 - 例如,它不在表本身中 . 你也可以去 TRIGGER 的路线 .
TRIGGER
此外,您可能希望简单地将您的ID作为生成的唯一GUID,并在必要时创建此重复计数器,在oracle website中使用 ROW_NUMBER() OVER ,例如 EMP_ID :
ROW_NUMBER() OVER
EMP_ID
SELECT department_id, last_name, employee_id, ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY employee_id) AS emp_id FROM employees; DEPARTMENT_ID LAST_NAME EMPLOYEE_ID EMP_ID ------------- ------------------------- ----------- ---------- 10 Whalen 200 1 20 Hartstein 201 1 20 Fay 202 2 30 Raphaely 114 1 30 Khoo 115 2 30 Baida 116 3 30 Tobias 117 4 30 Himuro 118 5 30 Colmenares 119 6
对于自动增量您可以创建如下序列 .
CREATE SEQUENCE name_of_sequence START WITH 1 INCREMENT BY 1;
对于查询的第二部分,您可以定义一个触发器,该触发器使用上面的序列自动填充主键值
3 回答
取决于您要如何插入数据 . 如果要同时插入多行,请尝试
MERGE
语句 . 加入电话号码,如果发现增加计数器列值,则将计数器设置为1 .如果要一次插入一行,则最好在执行插入的代码中完成 .
EDIT: 我没想到这一点 . 既然我是,我认为没有必要使用计数器列 . 如果您打算多次插入电话号码,为什么不必存储't you simply count each phone number? It doesn' .
你不能创建这样的表 .
但是,您可以将自己的逻辑添加到INSERT新行的位置 - 例如,它不在表本身中 . 你也可以去
TRIGGER
的路线 .此外,您可能希望简单地将您的ID作为生成的唯一GUID,并在必要时创建此重复计数器,在oracle website中使用
ROW_NUMBER() OVER
,例如EMP_ID
:对于自动增量您可以创建如下序列 .
对于查询的第二部分,您可以定义一个触发器,该触发器使用上面的序列自动填充主键值