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;