【问题标题】:While loops with Strings not Integers带有字符串而不是整数的 while 循环
【发布时间】: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 循环打印单个字符甚至整个字符串;或者可能为我指出正确的方向,即在哪里研究带有在线字符串的循环示例。

谢谢。

【问题讨论】:

标签: oracle plsql


【解决方案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>
    

    干杯!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-26
      • 2017-03-29
      • 1970-01-01
      • 2014-07-27
      • 2018-01-15
      • 2019-03-26
      • 2013-07-06
      • 2016-05-30
      相关资源
      最近更新 更多