2010-12-22 34 views
2

我正在使用Oracle的PL/SQL算法。PL/SQL - 字符串連接算法

我目前有一個程序有一個單一的數字參數。我的程序必須創建一個包含與參數值一樣多的'0'的字符串。

我目前正在使用一個for循環來實現這一目標:

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

是否有可能做一個線性的方式?我的意思是沒有循環,甚至沒有一個單一的陳述。

任何幫助,將不勝感激!

謝謝。

回答

11

您可以使用LPAD()來實現這一目標:

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

這裏是鏈接到手冊:使用不同的輸入值接受的答案的
http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions082.htm#i1371196

+3

+1:LPAD,就是這樣!很好的答案。但是,也許這個查詢將更好地適合所要求的:SELECT LPAD('',my_parameter,'0')FROM DUAL,因爲該參數僅用於計算'0'的數量;) – LaGrandMere 2010-12-22 11:09:09

+0

這正是我想要的!事實上,我只是想生成一個數字爲'0'的字符串,但我不知道LPAD,所以謝謝! – Hal 2010-12-22 11:18:14

3

示範。

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~ 
~~ ~~