我编写了一个程序来生成长度为 2 的字符串的所有可能组合。程序如下:
CREATE OR REPLACE PROCEDURE string_combinations
AS
vblString1 VARCHAR2(100);
vblString2 VARCHAR2(100);
vblChr1 NUMBER;
vblChr2 NUMBER;
BEGIN
vblChr1 := 65;
LOOP
SELECT Chr(vblChr1) INTO vblString1 FROM dual;
vblChr2 := 65;
LOOP
vblString2 := vblString1||Chr(vblChr2);
Dbms_Output.put_line(vblString2);
vblChr2:=vblChr2+1;
EXIT WHEN vblChr2=91;
END LOOP;
vblChr1:=vblChr1+1;
EXIT WHEN vblChr1=91;
END LOOP;
END;
/
我在另一个循环中使用了一个循环。因此,如果我必须生成长度为三的字符串,我可以简单地使用另一个循环。但如果我希望生成长度为 5、6、7 或更长的字符串,那就太长了。我该如何使用递归来实现它? 我正在使用甲骨文。
最佳答案
您不需要 PL/SQL 来生成字母顺序。您可以使用行生成器方法在纯SQL中完成此操作。
WITH combinations AS
(SELECT chr( ascii('A')+level-1 ) c FROM dual CONNECT BY level <= 26
)
SELECT * FROM combinations
UNION ALL
SELECT c1.c || c2.c FROM combinations c1, combinations c2
UNION ALL
SELECT c1.c
|| c2.c
|| c3.c
FROM combinations c1,
combinations c2,
combinations c3
/
以上将为您提供单个字符和两个字符的所有可能组合c1
、c2
、c3
。对于更多组合,您可以添加组合,例如 c4
、c5
等。
关于sql - 在oracle中生成一定长度的字符串的所有可能的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33565292/