带有字符串而不是整数的 while 循环
Posted
技术标签:
【中文标题】带有字符串而不是整数的 while 循环【英文标题】:While loops with Strings not Integers 【发布时间】:2019-10-17 01:40:47 【问题描述】:我无法找到有关 oracle plSQL while 在线字符串循环的任何信息。一切似乎都是整数。在进行研究时,我觉得我了解 plSQL 中 while 循环的整数方面,但我访问过的网站没有涉及或有使用字符串的 While 循环的示例。
例如:我可以使用 For 循环打印单词 'text' 中的单个字母,但是什么会阻止我使用 While 循环来获得相同的输出?
DECLARE
c1 Number:= 1;
c2 Varchar2(4);
BEGIN
FOR c1 in 1..4
LOOP
SELECT substr('text' , c1 , 1 ) into c2 from dual;
dbms_output.put_line(c2);
END LOOP;
END;
如果有人可以解释如何使用 while 循环打印单个字符甚至整个字符串;或者可能为我指出正确的方向,即在哪里研究带有在线字符串的循环示例。
谢谢。
【问题讨论】:
Documentation for loops。遗憾的是,没有for s in ('x', 'y', 'z') loop
构造。
【参考方案1】:
您可以完全基于字符编写WHILE
循环 - 无需任何类型的计数器。像这样的:
declare
txt varchar2(100);
begin
txt := 'my text';
while txt is not null loop
dbms_output.put_line(substr(txt, 1, 1)); -- or whatever else you need to do
txt := substr(txt, 2);
end loop;
end;
/
m
y
t
e
x
t
PL/SQL procedure successfully completed.
【讨论】:
【参考方案2】:是的,它可以使用WHILE
循环来编写。关键是length
函数和计数器。此外,您不需要选择查询。
SET SERVEROUTPUT ON
DECLARE
c1 NUMBER := 1;
txt VARCHAR2(20) := 'text';
BEGIN
WHILE c1 <= length(txt) LOOP
dbms_output.put_line(substr(txt,c1,1));
c1 := c1 + 1; --increment the counter
END LOOP;
END;
/
结果
t
e
x
t
PL/SQL procedure successfully completed.
【讨论】:
我猜整数计数器c1
的使用有点违背 OP 的要求...循环“使用字符串”而不是整数?【参考方案3】:
您可以在 WHILE 循环中直接使用 SUBSTR,如下所示:
SQL>
SQL> set serverout on
SQL> DECLARE
2 C1 NUMBER := 1;
3 C2 VARCHAR2(10) := 'TEXT';
4 BEGIN
5 WHILE SUBSTR(C2, C1, 1) IS NOT NULL LOOP
6 DBMS_OUTPUT.PUT_LINE(SUBSTR(C2, C1, 1));
7 C1 := C1 + 1;
8 END LOOP;
9 END;
10 /
T
E
X
T
PL/SQL procedure successfully completed.
SQL>
干杯!!
【讨论】:
以上是关于带有字符串而不是整数的 while 循环的主要内容,如果未能解决你的问题,请参考以下文章