美好的一天! 有一张桌子:
CREATE TABLE table
(
start_range varcahar2(10),
end_range varcahar2(10),
val_range NUMBER(10)
);
在初始阶段,我们填写了两个字段:start_range和end_range。
start_range = a1;
end_range = a5;
您可以在Apex的a1-a5
(a1, a2, a3, a4, a5)
范围内填写一个完全不同的表吗?
答案 0 :(得分:0)
看起来像一个层次查询。
测试用例:
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.
结果:
SQL> SELECT * FROM test2 ORDER BY val;
VAL
----------
a1
a2
a3
a4
a5
L4819201
L4819202
L4819203
L4819204
L4819205
10 rows selected.
SQL>
答案 1 :(得分:0)
您可以使用以下内容:
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;
我假设您的开始和结束范围的前缀具有格式(string || number)
干杯!