2015-10-17 55 views
1

我想多次從用戶那裏獲取輸入,並且我正在使用替換變量但無法獲得所需的輸出。我期待oracle向用戶請教輸入多次,具體取決於循環條件。例如,#Oracle#PL/SQL:用於多個輸入的替換變量

declare 
    names varchar2(100); 

    begin 
    for j in 1..3 loop 
    names:='&i'; 
    dbms_output.put_line(j ||names); 
    end loop; 

    end; 
    /

----------------------輸出-------- ---------

1jack 
2jack 
3jack 

請提出一些相同的替代方案。

+0

第一句話的措辭有點混亂。 – ppperry

+4

你不能合理。 PL/SQL無法提示用戶輸入。這必須由客戶端應用程序完成。 SQL * Plus具有非常有限的工具來提示輸入,並且它沒有編寫循環的工具。您可以構建一個非常不尋常/複雜的SQL * Plus腳本來模擬一個循環,但編寫批處理文件/ shell腳本/ perl腳本/其他提示輸入並將查詢發送到數據庫的其他腳本將非常容易。 –

+0

@ppperry:如果我運行這個塊,Oracle會要求用戶給出一個輸入,並且該值將被存儲在變量名稱中,並且會在上述情況下顯示三次。我希望oracle要求用戶輸入三次以便可以打印不同的名稱。請幫助我解決這個問題。 – Jash

回答

0

您可以使用參數列表作爲集合構造函數參數。你不可能一次輸入一個值,而是一次輸入值。

[email protected]> DECLARE 
    2  TYPE t IS TABLE OF VARCHAR2(32767); 
    3  names t := t(&names); 
    4 BEGIN 
    5  FOR j IN 1..names.COUNT LOOP 
    6    dbms_output.put_line(j || names(j)); 
    7  END LOOP; 
    8 END; 
    9/
Enter value for names: 'Jack', 'Niels', 'Tom' 
1Jack 
2Niels 
3Tom 

PL/SQL procedure successfully completed. 
+0

當我運行上面的代碼時出現以下錯誤 錯誤報告: ORA-06550:第3行第28列: PLS-00302:必須聲明組件'COUNT' ORA-06550:第3行,列9: PL/SQL:忽略語句 06550. 00000 - 「行%s,列%s:\ n%s」 *原因:通常是PL/SQL編譯錯誤。 *操作: – Jash

+0

奇怪。你使用的是哪個Oracle版本?你也可以使用'FOR j IN 1..names.LAST LOOP',在這種情況下沒有區別。 – Husqvik

+0

我正在使用oracle 12C,我得到一個錯誤標識符'Jack'必須聲明 – Jash