在记录列表之间插入新记录

Jaa*_*nna 2 sql oracle oracle11g

我想在已经在表中的记录之间插入记录.有超过40000条记录,我想把这个新记录放在第19位.我该怎么办?

让我们考虑一个有5条记录的例子:

表数据:

CREATE TABLE enum
  (identifier  VARCHAR2(64),
   code VARCHAR2(512),
   data VARCHAR2(4000))
/
INSERT ALL 
INTO enum VALUES ('HR_B_A', 'Halli, L6', 'Halli, L6')
INTO enum VALUES ('HR_B_A', 'Halli, L7', 'Halli, L7')
INTO enum VALUES ('HR_B_A', 'Halli, L8', 'Halli, L8')
INTO enum VALUES ('HR_B_A', 'Halli, L9', 'Halli, L9')
INTO enum VALUES ('HR_B_A', 'Halli, P6', 'Halli, P6')
INTO enum VALUES ('HR_B_A', 'Halli, P7', 'Halli, P7')
select * from dual
/
Run Code Online (Sandbox Code Playgroud)

所以当我们查看表格时,我们得到:

SELECT * FROM enum

IDENTIFIER     CODE         DATA
----------   ---------    ---------
HR_B_A       Halli, L6    Halli, L6
HR_B_A       Halli, L7    Halli, L7
HR_B_A       Halli, L8    Halli, L8
HR_B_A       Halli, L9    Halli, L9
HR_B_A       Halli, P6    Halli, P6
HR_B_A       Halli, P7    Halli, P7
Run Code Online (Sandbox Code Playgroud)

运行select查询时我想要的是:

SELECT * from enum

IDENTIFIER     CODE         DATA
    ----------   ---------    ---------
    HR_B_A       Halli, L6    Halli, L6
    HR_B_A       Halli, L7    Halli, L7
    HR_B_A       Halli, L8    Halli, L8
    HR_B_A       Halli, L9    Halli, L9
    HR_B_A       Halli, L10   Halli, L10
    HR_B_A       Halli, P6    Halli, P6
    HR_B_A       Halli, P7    Halli, P7
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一方法是将数据传输到表中的L9行(例如enum_temp),插入L10行,然后传输该表中的剩余数据.但我似乎无法弄清楚查询的语法.

提前致谢 :-)

a_h*_*ame 8

关系数据库中的行未排序

除非ORDER BY在SELECT中使用表达式,否则无法确保任何所需的顺序.

当您在值中混合使用几种类型的"信息"时,您需要使用以下内容:

select *
from enum
order by regexp_replace(code, '[0-9]', ''), 
         to_number(regexp_replace(code, '[^0-9]', ''))
Run Code Online (Sandbox Code Playgroud)

表达式的第一个顺序是由不包含数字的代码部分组成的.这样,所有Halli, L值都被排序在一起.然后,表达式的第二个顺序按代码的数值排序(剥离所有非数字字符).