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行,然后传输该表中的剩余数据.但我似乎无法弄清楚查询的语法.
提前致谢 :-)
关系数据库中的行未排序
除非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值都被排序在一起.然后,表达式的第二个顺序按代码的数值排序(剥离所有非数字字符).
| 归档时间: |
|
| 查看次数: |
289 次 |
| 最近记录: |