如何在oracle 12c中找到标识列的currval

时间:2018-04-15 10:55:29

标签: oracle oracle12c

我在oracle 12中创建了一个以列为标识的表。问题是我想找到标识列的当前值。我怎么能找到这个,请有人帮我解决这个问题...

3 个答案:

答案 0 :(得分:1)

你为什么想知道?如果要插入子行,您可以使用 ShapeUtil.drawCircle( width, height) .then(function (resultSVG) { sharp(croppedImage) .overlayWith(new Buffer(resultSVG), {cutout: true}) .png().toBuffer(); } 语句的returning子句,如下所示:

insert

答案 1 :(得分:1)

您可以使用数据字典视图*_TAB_IDENTITY_COLS

这是一个有效的例子。

create TABLE t ( ID INTEGER GENERATED BY DEFAULT AS IDENTITY, NAME VARCHAR2(10));
Table created.

INSERT INTO t(NAME) VALUES ( 'TESTER' );  

1 row(s) inserted.

select SEQUENCE_NAME FROM user_tab_identity_cols WHERE TABLE_NAME ='T' ;

SEQUENCE_NAME
-----------
ISEQ$$_1727054

现在你可以从这个序列中获得currval

select ISEQ$$_1727054.CURRVAL FROM DUAL;

CURRVAL
-------
1

LIVESQL DEMO - 需要免费的OTN帐户。

答案 2 :(得分:0)

正如我在this blog post中所写的那样,此查询会生成模式的所有标识的后备序列的currval值:

with
  function current_value(p_table_name varchar2) return number is
    v_current number;
  begin
    for rec in (
      select data_default
      from user_tab_cols
      where table_name = p_table_name
      and data_default is not null
      and identity_column = 'YES'
    )
    loop
      execute immediate replace(
        'select ' || rec.data_default || ' from dual', 
        '.nextval', 
        '.currval'
      ) into v_current;
      return v_current;
    end loop;

    return null;
  end;
select *
from (
  select table_name, current_value(table_name) current_value
  from user_tables
)
where current_value is not null
order by table_name;
/

输出可能是这样的:

TABLE_NAME   CURRENT_VALUE
--------------------------
T1           3
T2           1