【发布时间】:2021-11-10 05:15:57
【问题描述】:
我有一个名为 ORG 的表,其中有一个名为 ORG_ID 的字段,我需要从 ORG ID 中获取特定前缀的最大值。例如
表组织
| ORG_ID | ORG_NAME |
|---|---|
| AB1 | Apple |
| AB2 | |
| HQ1 | Microsoft |
| AB3 | Tesla |
| HQ2 | Amazon |
现在,我想获取与前缀 AB 关联的最大数值,我在下面使用
select max(ORG.ORG_ID)
from ORG
where ORG_ID like 'AB'
它返回AB3我可以使用正则表达式来获取数值3。
我关心的是上面的选择查询是否总是保证序列 AB 的最大数值。
代码
DECLARE
v_max_number NUMBER;
v_max_org_id VARCHAR2 (20);
v_max_var VARCHAR2 (20);
CURSOR curb IS
SELECT org_id, name
FROM tableb
FOR UPDATE;
cbr curb%ROWTYPE;
i NUMBER := 1;
BEGIN
SELECT MAX (tablea.org_id)
INTO v_max_org_id
FROM tablea
WHERE org_id LIKE 'AB%';
SELECT REGEXP_SUBSTR (v_max_org_id, '\d+') INTO v_max_number FROM DUAL;
SELECT REGEXP_SUBSTR (v_max_org_id, '\D+') INTO v_max_var FROM DUAL;
-- For Loop to write data to Table B
OPEN curb;
LOOP
FETCH curb INTO cbr;
EXIT WHEN curb%NOTFOUND;
v_max_org_id := v_max_var || TO_CHAR (v_max_number + i);
UPDATE tableb
SET org_id = v_max_org_id
WHERE CURRENT OF curb;
i := i + 1;
END LOOP;
END;
【问题讨论】:
-
此查询不返回
AB3,因为ORG_ID like 'AB'与ORG_ID = 'AB'相同。请使用正则表达式显示您的代码 -
嗨@astentx,我在问题中添加了代码。