PL/SQL - 字符串连接算法

发布于 2024-10-09 01:55:42 字数 325 浏览 2 评论 0原文

我正在与 Oracle 一起研究 PL/SQL 算法。

我目前有一个只有一个数字参数的过程。我的过程必须创建一个字符串,其中包含与参数值一样多的“0”。

我目前正在使用 for 循环来实现此目的:

MY_STRING VARCHAR2(30);
FOR I IN 1..MY_PARAMETER 
LOOP
     MY_STRING := CONCAT(MY_STRING, '0');
END LOOP;

是否可以以线性方式完成?我的意思是没有循环,甚至只有一个语句。

任何帮助将不胜感激!

谢谢。

I'm working on a PL/SQL algorithm, with Oracle.

I currently have a procedure which have one single numeric parameter. My procedure have to create a string which contains as much '0' as the parameter value.

I am currently using a for loop to achieve this:

MY_STRING VARCHAR2(30);
FOR I IN 1..MY_PARAMETER 
LOOP
     MY_STRING := CONCAT(MY_STRING, '0');
END LOOP;

Is it possible to do it in a linear way ? I mean without a loop, or even with one single statement.

Any help would be appreciated !

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

归属感 2024-10-16 01:55:42

您可以使用 LPAD() 来实现此目的:

SELECT LPAD('0', my_parameter, '0')
FROM DUAL

这是手册的链接:
http://download.oracle.com/docs/cd/B19306_01/ server.102/b14200/functions082.htm#i1371196

You can use LPAD() to achieve this:

SELECT LPAD('0', my_parameter, '0')
FROM DUAL

Here is the link to the manual:
http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions082.htm#i1371196

何以笙箫默 2024-10-16 01:55:42

使用各种输入值演示可接受的答案。

set serveroutput on size 1000000 format wrapped

Declare
   my_parameter Number(3);
   my_string    Varchar2(10);

Begin
   DBMS_Output.Put_Line('Input Output');
   DBMS_Output.Put_Line('===== ======');

   For vLoopVar IN 0..5 Loop     
      my_parameter := vLoopVar;

      If (vLoopVar = 5) Then
         my_parameter := '';
      End If;

      DBMS_Output.Put(RPAD('~' || my_parameter || '~',6));

      --Method 1
      my_string := lpad('0',my_parameter,'0');
      DBMS_Output.Put_Line('~' || my_string || '~');

   End Loop;
End;
/

输出

Input Output
===== ======
~0~   ~~
~1~   ~0~
~2~   ~00~
~3~   ~000~
~4~   ~0000~
~~    ~~

Demonstration of accepted answer using various input values.

set serveroutput on size 1000000 format wrapped

Declare
   my_parameter Number(3);
   my_string    Varchar2(10);

Begin
   DBMS_Output.Put_Line('Input Output');
   DBMS_Output.Put_Line('===== ======');

   For vLoopVar IN 0..5 Loop     
      my_parameter := vLoopVar;

      If (vLoopVar = 5) Then
         my_parameter := '';
      End If;

      DBMS_Output.Put(RPAD('~' || my_parameter || '~',6));

      --Method 1
      my_string := lpad('0',my_parameter,'0');
      DBMS_Output.Put_Line('~' || my_string || '~');

   End Loop;
End;
/

Output

Input Output
===== ======
~0~   ~~
~1~   ~0~
~2~   ~00~
~3~   ~000~
~4~   ~0000~
~~    ~~
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文