使用自动增量功能创建oracle表

使用自动增量功能创建oracle表,oracle,Oracle,如何创建具有自动递增列的oracle表,以便在插入exsisiting值时应递增计数器,否则应插入新计数 例如,如果我有一列电话号码和状态 应该有另一个名为counter的列,自动递增功能将出现在该列上 每当再次插入现有电话号码时,计数器必须递增,如果插入新值,则计数器应为该号码添加新的初始值。您不能创建这样的表 但是,您可以将自己的逻辑添加到插入新行的位置,例如,它不在表本身中。您也可以使用触发器 此外,您可能希望您的ID是一个唯一的GUID,在必要时生成并创建此重复计数器,在本例中使用ROW

如何创建具有自动递增列的oracle表,以便在插入exsisiting值时应递增计数器,否则应插入新计数

例如,如果我有一列电话号码和状态 应该有另一个名为counter的列,自动递增功能将出现在该列上


每当再次插入现有电话号码时,计数器必须递增,如果插入新值,则计数器应为该号码添加新的初始值。您不能创建这样的表

但是,您可以将自己的逻辑添加到插入新行的位置,例如,它不在表本身中。您也可以使用
触发器

此外,您可能希望您的ID是一个唯一的GUID,在必要时生成并创建此重复计数器,在本例中使用
ROW_NUMBER(),如
EMP_ID
,来自:


取决于插入数据的方式。如果要同时插入多行,请尝试
MERGE
语句。 加入电话号码,如果找到,则增加计数器列值,否则将计数器设置为1

如果要一次插入一行,那么最好在执行插入的代码中完成

编辑:我没有想清楚这一点。既然我是,我认为没有必要使用计数器列。
如果您要多次插入电话号码,为什么不简单地计算每个电话号码?它不必存储。

对于自动增量,您可以创建如下序列

CREATE SEQUENCE name_of_sequence
  START WITH 1
  INCREMENT BY 1;

对于查询的第二部分,您可以定义一个触发器,使用上述顺序自动填充主键值

,这样每个电话号码都有自己的计数器?是的。如果再次插入相同的电话号码,则只有计数器应增加感谢您的响应。在您给出的同一个示例中,是否可以获得每组部门的最大emp_id?您需要更多地解释您希望数据看起来如何以及为什么要这样做。你可以很容易地计算出一个数字出现的次数。这不是OP所要求的。问题是要设立一个反专栏。不是主键。当在新列中插入时,只要再次插入现有电话号码,计数器/序列就可以递增并插入到新列中。这不等于计算电话号码出现的次数吗?以及如何检查电话号码是否已经存在?OP基本上是要求为每一组副本提供一个id。在插入之前,您可以检查电话号码是否已插入逻辑中。如果存在,您可以执行序列或自动递增值,我希望这能消除您的疑虑。感谢您的回复。如果对于每个部门
选择部门,每个部门的员工组中的最大emp(emp)id作为最大值,是否有可能获得我想要的每个部门的最大emp(而不是所有emp)
CREATE SEQUENCE name_of_sequence
  START WITH 1
  INCREMENT BY 1;