我想在表中已有的记录之间插入一条记录。有超过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
/
因此,当我们检查表格时,我们得到:
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
运行选择查询时,我希望拥有什么:
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
我能想到的唯一方法是将数据传输到表中的L9行(例如enum_temp),插入L10行,然后传输该表中的剩余数据。但是我似乎无法弄清楚查询的语法。
提前致谢 :-)
最佳答案
关系数据库中的行未排序
除非您在SELECT中使用ORDER BY
表达式,否则无法确保任何所需的顺序。
当您在值中混合几种类型的“信息”时,您将需要使用以下内容:
select *
from enum
order by regexp_replace(code, '[0-9]', ''),
to_number(regexp_replace(code, '[^0-9]', ''))
表达式的第一阶按不包含数字的代码部分进行排序。这样,所有
Halli, L
值将一起排序。然后,按表达式的第二个顺序按代码的数字值排序(所有非数字字符都剥离)。关于sql - 在记录列表之间插入新记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10410328/