SQL编写脚本: 查主键最大值, 主键对应序列当前值

背景: 重新导入数据后, 主键ID增长了很多,但是序列值没有对应增加。

常规操作: 打开PL/SQL 找到对应的序列手动修改nextval

非常规:  用SQL实现自动化

数据库特殊表:  user_cons_columns  , DUAL

序列: sequence.currval 当前值    sequence.nextval 下一个值, 修改序列的值:alter sequence seq_t_test increment by n;  

相关语法:  字符拼接用双竖线  ||     

 

基础sql :  

①查询字段A最大值:  SELECT MAX(colname) FORM tablename;

②查询序列当前值: SELECT sequencename.CURRVAL;

进阶SQL:

③查询所有表的主键,表名..., 涉及表-USER_CONS_COLUMNS , 

SELECT * FROM user_cons_columns WHERE position is not null

④最后依赖 拼接语法,将语句拼接为你想要的格式

示例ⅰ:


SELECT ' SEQ_'||COLUMN_NAME||'.CURRVAL ' SEQNOW  , 'SELECT MAX('||COLUMN_NAME||') FROM '||TABLE_NAME  MAXPK  FROM user_cons_columns WHERE position is not null

示例ⅰi:

SELECT ('SELECT  ' || SEQNOW || ' 序列当前值,(' || MAXPK || ') 主键最大值  FROM DUAL')
  FROM (SELECT ' SEQ_' || COLUMN_NAME || '.CURRVAL ' SEQNOW,
               'SELECT MAX(' || COLUMN_NAME || ') FROM ' || TABLE_NAME MAXPK
                SELECT * FROM USER_CONS_COLUMNS WHERE POSITION IS NOT NULL
        ) T

可以用SQL中的判断来进行更高级的封装...还没完善,先记到这

 

 

你可能感兴趣的:(SQL,SQL)