2015-10-06 67 views
0
CREATE OR REPLACE PROCEDURE Proc_TEST(T_DATE DATE DEFAULT TRUNC(SYSDATE)) 
AS 
    PREV1 VARCHAR(20); 
    mnth VARCHAR(20); 
BEGIN 
SELECT TO_CHAR(TO_DATE(TRUNC(T_DATE,'MM')-1),'MON_YYYY') INTO PREV1 FROM DUAL; 
FOR i IN 1 .. 3 LOOP 
    mnth:='PREV'||i; 
    DBMS_OUTPUT.PUT_LINE('op'||mnth); 
    DBMS_OUTPUT.PUT_LINE('op'||PREV1); 
END LOOP; 
END; 
/

我得到輸出獲得不正確的輸出在下面的PL/SQL PROC

opPREV1 
opSEP_2015 

,而我必須讓

opSEP_2015 
opSEP_2015 

+3

請檢查這兩行代碼:'mnth:='PREV'|| i;'和 'DBMS_OUTPUT.PUT_LINE('op'|| mnth); ',這個錯誤是顯而易見的。 – krokodilko

+0

我認爲你將標識符(例如'PREV1'變量)與文字串值(例如''PREV'|| i')混合在一起。這將有助於瞭解您嘗試通過此過程實現的目標。 –

+0

嗨,Jeff,我有三個變量prev1,prev2,prev3,並試圖使用for循環打印這些變量中的值。 –

回答

0

你不能通過串聯一些字符串來創建一個變量標識符,字符串文字作爲字符串而不是具有相同拼寫的標識符!

您可以使用一個固定大小的數組VARRAY

declare 
    type array_t is varray(3) of varchar2(10); 
    array array_t := array_t('Matt', 'Joanne', 'Robert'); 
begin 
    for i in 1..array.count loop 
     dbms_output.put_line(array(i)); 
    end loop; 
end; 

或者TABLE一個無限陣列:

... 
    type array_t is table of varchar2(10); 
... 

單詞「表」這裏有沒有關係數據庫表,容易混淆。這兩種方法都會創建內存數組。