【问题标题】:sequence creation in oracleoracle中的序列创建
【发布时间】:2011-08-28 18:28:02
【问题描述】:

我想在 oracle 中创建一个序列,其中列字段(Empid)的最大值必须是序列的最小值。

下面是我在同一个 stackexchange 中找到的一个

create sequence mytemp_seq start with &v_Startval;

此命令提示我输入我必须输入的列名的最大值。

如何在不提示的情况下修复 &v_startval 的值,而是直接从下面的语句中设置值

select max(empid) from mytemp..

我在下面这样尝试

create sequence mytemp_seq start with (SELECT MAX(empid) from mytemp)

但它不起作用。

【问题讨论】:

  • 以下两个答案(Tony Andrews 和 schurik)在不同情况下都很好。如果这是部署脚本的一部分,我会使用 schurik 的答案,因为它会生成更具描述性的假脱机文件。如果您打算将此作为常规活动进行,我会将 Tony 的答案嵌入到一个包中(并对设计提出质疑;动态创建序列通常是设计决策不佳的结果)。

标签: oracle oracle10g


【解决方案1】:

你可以用一些 PL/SQL 来做到这一点:

declare
  v_startval integer;
begin
  select max(empid)+1 into v_startval from mytemp;
  execute immediate 'create sequence mytemp_seq start with ' || v_startval;
end;

【讨论】:

    【解决方案2】:

    在sqlplus中你可以这样做

    col max_id new_value seq_min_val  
    SELECT MAX(empid)+1 AS max_id from mytemp;
    create sequence mytemp_seq start with &seq_min_val;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-28
      • 2017-07-29
      • 2018-08-09
      • 1970-01-01
      • 2015-02-21
      • 2016-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多