While循环使用字符串而不是整数

时间:2019-10-17 01:40:47

标签: oracle plsql

在在线循环字符串时,我无法找到有关oracle plSQL的任何信息。似乎都是整数。在进行研究时,我感到我了解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循环解释如何打印单个字符甚至整个字符串;或者可能在网上搜索字符串时在哪里研究示例方面指明了正确的方向。

谢谢。

3 个答案:

答案 0 :(得分:3)

您可以完全根据字符编写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.

答案 1 :(得分: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.

答案 2 :(得分:0)

您可以直接在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>

干杯!

相关问题