while循环PL/SQL向后读取一个字符串
While loop PL/SQL read a string backwards
我需要帮助解决这个问题,使用 PL/SQL 如何使用 while 循环向后读取字符串?
我知道 for 循环有一个叫做 reverse 的方法,但我不知道如何使用 while 循环。如果你能帮助我,我将不胜感激
这是一种选择:
SQL> set serveroutput on
SQL>
SQL> declare
2 l_str varchar2(20) := 'Littlefoot';
3 i number;
4 retval varchar2(20);
5 begin
6 i := length(l_str);
7 while i <> 0 loop
8 retval := retval || substr(l_str, i, 1);
9 i := i - 1;
10 end loop;
11 dbms_output.put_line(retval);
12 end;
13 /
toofelttiL
PL/SQL procedure successfully completed.
SQL>
如果不必 PL/SQL,分层查询和 listagg
可能是另一种方法:
SQL> var l_str varchar2(20)
SQL> exec :l_str := 'Littlefoot';
PL/SQL procedure successfully completed.
SQL> select listagg(substr(:l_str, length(:l_str) - level + 1, 1), '') within group (order by level) result
2 from dual
3 connect by level <= length(:l_str);
RESULT
--------------------------------------------------------------------------------
toofelttiL
SQL>
我需要帮助解决这个问题,使用 PL/SQL 如何使用 while 循环向后读取字符串?
我知道 for 循环有一个叫做 reverse 的方法,但我不知道如何使用 while 循环。如果你能帮助我,我将不胜感激
这是一种选择:
SQL> set serveroutput on
SQL>
SQL> declare
2 l_str varchar2(20) := 'Littlefoot';
3 i number;
4 retval varchar2(20);
5 begin
6 i := length(l_str);
7 while i <> 0 loop
8 retval := retval || substr(l_str, i, 1);
9 i := i - 1;
10 end loop;
11 dbms_output.put_line(retval);
12 end;
13 /
toofelttiL
PL/SQL procedure successfully completed.
SQL>
如果不必 PL/SQL,分层查询和 listagg
可能是另一种方法:
SQL> var l_str varchar2(20)
SQL> exec :l_str := 'Littlefoot';
PL/SQL procedure successfully completed.
SQL> select listagg(substr(:l_str, length(:l_str) - level + 1, 1), '') within group (order by level) result
2 from dual
3 connect by level <= length(:l_str);
RESULT
--------------------------------------------------------------------------------
toofelttiL
SQL>