【问题标题】:Getting nextval from a backing sequence of an identity column从标识列的支持序列中获取 nextval
【发布时间】:2017-10-22 02:10:39
【问题描述】:

我有一个这样声明的表列:

file_id number(10) generated always as identity primary key,

是否可以通过编程方式从其支持序列中获取currval/nextval 而无需实际查看 SYS。表来获取序列的名称,然后在该名称上使用execute immediate

【问题讨论】:

    标签: oracle plsql oracle12c


    【解决方案1】:

    是否可以通过编程方式从其获取 currval/nextval 支持序列而不实际查看 SYS

    是的,如果您确实需要这样做。您可以在USER_SEQUENCES 数据字典视图或更好的USER_TAB_IDENTITY_COLS 数据字典视图中简单地查找该序列名称,然后在查询中引用它。这是一个例子:

    create table t1(
      c1 number  generated always as identity primary key
    );
    
    insert into t1 values(default);
    
    select *  from t1;
    
    C1
    -----
        1
    

    在我的例子中,Oracle 为标识列创建的序列名称是ISEQ$$_92984

    select "ISEQ$$_92984".nextval from dual;
    
    NEXTVAL
    -------
         2
    
    insert into t1 values(default);
    
    select * from t1;
    
     C1
     ---------
             1
             3
    

    【讨论】:

    • 这与查看 sys 表基本相同(因为您需要先将序列名称提取到变量中,然后通过变量名称查询序列),假设我只知道表的名称和编写 plsql 代码时的列。我希望有一些简单的东西,比如 TABLE.COLUMN.NEXTVAL :)
    猜你喜欢
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    相关资源
    最近更新 更多