sql - 将 MAX(id) 分配给序列

标签 sql oracle powerbuilder

我想使用 powerbuilder 中的一些数据向表中插入一些数据。在使用 SQL 序列递增最后一个已知 ID 时,我有点迷茫。

我知道如何找到最大 ID,但我如何使用序列来确保每个新的 INSERT 都会将 ID 递增 1?

到目前为止,我所知道的就是如何找到我的最大 ID:

SELECT MAX(id)
FROM table_name;

编辑 我正在为我的数据库使用 Oracle

谢谢。

最佳答案

如果要向其中插入数据的表的 ID 值来自模式序列中已经存在的值,那么欢迎您继续使用该序列来插入新记录。

如果你想创建一个新的序列,从表的 ID 列的最大值开始生成数字,那么你可以执行以下操作

创建序列:

create sequence Seq_Name;

更改值序列将开始于

declare
  l_max_ID number;
  l_Temp_val number;
begin
  select max(ID) into l_max_ID
    from your_table;

  execute immediate 'alter sequence Seq_Name increment by ' || To_Char(l_Max_ID);

  select Seq_Name.currval into l_temp_val
    from dual;

  execute immediate 'alter sequence Seq_Name increment by ' || To_Char(1);
end; 

并使用下面列出的任何方法来获取序列的下一个值。

Insert into your_table(id, [other_columns])
  values(Seq_name.nextval, [other_values]);

create or replace trigger Tr_Name before insert on Your_Table_name
for each row
begin
  -- if you are using oracle prior to 11g then 
  select Seq_name.nextval into :new.id -- or any other column
    from dual;
  --     OR
  -- if your Oracle version is 11g onward you can simply assign 
  -- sequence's value to a new ID
  :new.id := Seq_Name.nextval;

end;

关于sql - 将 MAX(id) 分配给序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12566201/

相关文章:

sql - 使用 SQLite 使用另一个表中的值更新列?

mysql - @MapsId 以及与 session 关联的具有相同标识符值的两个对象

java - 如何配置 dbeaver 代理连接到私有(private) Maven 存储库

sql - oracle中使用存储过程进行分页和排序

powerbuilder - 如何删除PowerBuilder数据窗口中的多余列

sql - 需要使用复合主键计算不同的值

sql - 使用多个条件和多行进行更新

oracle - Firebird 像 Oracle 中一样创建函数 TRANSLATE

powerbuilder - DataWindow错误: Row changed between retrieve and update

PowerBuilder GUI 到 Web 应用程序 - 最佳选择?