Sql 范围填充表
你好! 有一张桌子:Sql 范围填充表,sql,oracle,oracle-apex,Sql,Oracle,Oracle Apex,你好! 有一张桌子: CREATE TABLE table ( start_range varcahar2(10), end_range varcahar2(10), val_range NUMBER(10) ); 在初始阶段,我们填写了两个字段:开始范围和结束范围 start_range = a1; end_range = a5; 您能在Apex中填写a1-a5 a1、a2、a3、a4、a5范围内完全不同的表格吗?看起来像是分层查询 测试用例: SQL> CREATE TABLE
CREATE TABLE table
(
start_range varcahar2(10),
end_range varcahar2(10),
val_range NUMBER(10)
);
在初始阶段,我们填写了两个字段:开始范围和结束范围
start_range = a1;
end_range = a5;
您能在Apex中填写a1-a5 a1、a2、a3、a4、a5范围内完全不同的表格吗?看起来像是分层查询 测试用例:
SQL> CREATE TABLE test
2 (
3 start_range VARCHAR2 (10),
4 end_range VARCHAR2 (10),
5 val_range NUMBER (10)
6 );
Table created.
SQL> INSERT INTO test
2 VALUES ('a1', 'a5', NULL);
1 row created.
SQL> INSERT INTO TEST
2 VALUES ('L4819201', 'L4819205', NULL);
1 row created.
SQL> SELECT * FROM test;
START_RANG END_RANGE VAL_RANGE
---------- ---------- ----------
a1 a5
L4819201 L4819205
查询:
SQL> INSERT INTO test2 (val)
2 SELECT SUBSTR (start_range, 1, 1)
3 || TO_CHAR (
4 ( TO_NUMBER (REGEXP_SUBSTR (start_range, '\d+$'))
5 + COLUMN_VALUE
6 - 1))
7 AS val
8 FROM test
9 CROSS JOIN
10 TABLE (
11 CAST (
12 MULTISET (
13 SELECT LEVEL
14 FROM DUAL
15 CONNECT BY LEVEL <=
16 TO_NUMBER (
17 REGEXP_SUBSTR (end_range, '\d+$'))
18 - TO_NUMBER (
19 REGEXP_SUBSTR (start_range, '\d+$'))
20 + 1) AS SYS.odcinumberlist))
21 WHERE start_range = '&start_range';
Enter value for start_range: a1
5 rows created.
SQL> /
Enter value for start_range: L4819201
5 rows created.
您可以使用以下选项:
SELECT
DISTINCT PREFIX || ( START_RANGE + LEVEL - 1 )
FROM
(
SELECT
REGEXP_SUBSTR(START_RANGE, '^[[:alpha:]]+') AS PREFIX,
REGEXP_SUBSTR(START_RANGE, '\d+$') AS START_RANGE,
REGEXP_SUBSTR(END_RANGE, '\d+$') AS END_RANGE
FROM
TEST
)
CONNECT BY
LEVEL <= END_RANGE - START_RANGE + 1
ORDER BY 1;
我假设您的开始和结束范围的前缀与formatstring | | number相同
干杯 谢谢,但是我该如何把这个答案写到表2中呢??使用INSERT、Andrii将VAL线。在表格val中插入选择substrstart\u范围。我编辑了我的答案;请看一看。非常感谢您的帮助,这是我写start_range=L4819201时的最后一个问题;end_范围=L4819205;当然不行了。您必须在第4行中输入L4819201,而不是a1。我更改了它们HI,如果我有多个条目?它在所有范围内搜索,我需要一个特定的,可以同时在两个表中写下吗?嗨,我想再次感谢你的帮助,并要求更多,当使用极端寒冷作为L00000000和L00000010时,我得到:L1,L2,L3。。。但我想看看:L00000000,L00000001,L00000002,…,你能帮我吗??
SELECT
DISTINCT PREFIX || ( START_RANGE + LEVEL - 1 )
FROM
(
SELECT
REGEXP_SUBSTR(START_RANGE, '^[[:alpha:]]+') AS PREFIX,
REGEXP_SUBSTR(START_RANGE, '\d+$') AS START_RANGE,
REGEXP_SUBSTR(END_RANGE, '\d+$') AS END_RANGE
FROM
TEST
)
CONNECT BY
LEVEL <= END_RANGE - START_RANGE + 1
ORDER BY 1;