PL / SQL - алгоритм конкатенации строк - PullRequest
2 голосов
/ 22 декабря 2010

Я работаю над алгоритмом PL / SQL с Oracle.

В настоящее время у меня есть процедура, которая имеет один числовой параметр. Моя процедура должна создать строку, которая содержит столько же «0», сколько значение параметра.

В настоящее время я использую цикл for для достижения этой цели:

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

Возможно ли сделать это линейным способом? Я имею в виду без цикла или даже с одним утверждением.

Любая помощь будет оценена!

Спасибо.

Ответы [ 2 ]

11 голосов
/ 22 декабря 2010

Вы можете использовать LPAD () для достижения этой цели:

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

Вот ссылка на руководство:http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions082.htm#i1371196

3 голосов
/ 22 декабря 2010

Демонстрация принятого ответа с использованием различных входных значений.

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~
~~    ~~
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...