2017-10-09 62 views
0

我剛剛開始使用PL/SQL,因此請友好。 我有一個簡單的問題,我想從表中提取不同的名稱。 當我這樣做時,在循環內部,我將針對其他操作中的每個不同名稱執行操作。創建在循環內輸出不同名稱的Oracle PL/SQL過程

我被困在如何獲得循環內的唯一名稱。我做的是不是因爲工作,如果我有:

1 MARY 
2 MARY 
3 JOHN 

我輸出:

MARY 
MARY 

相反的:

MARY 
JOHN 

這是我的代碼:

create or replace PROCEDURE CREATE_TABLE 
(
NM OUT VARCHAR2, 
tot OUT NUMBER 
) 
AS 

BEGIN 
SELECT count(DISTINCT NAME) INTO tot FROM MYTABLE; 


FOR r IN 1..tot 
LOOP 
SELECT NAME INTO NM 
FROM (
     SELECT DISTINCT NAME, 
     ROWNUM rnum 
     FROM MYTABLE 
     ORDER BY NAME DESC 
    ) 
WHERE rnum = r; 

dbms_output.put_line (NM); 
END LOOP; 

END; 
+1

'SELECT DISTINCT名稱,ROWNUM rnum'是你的問題的根源 - 因爲ROWNUM是所有獨特記錄,然後'DISTINCT'是reduntant。你從子查詢中得到了2個'Mary',首先是rownum 1,第二個是rownum 2.爲什麼在這裏使用'rownum'?我不明白你的意圖。 – krokodilko

+0

對於每個獨特的名字,我需要做一些操作(連接其他表格等)。我需要的只是一個循環,並在循環內部逐個提取不同的名稱。因此,在這種情況下,我想要MARY然後是JOHN,以便我可以與另一個具有與JOHN或MARY有關的屬性的表加入。 – user

回答

1

我會使用隱式遊標循環來代替,它們是非常容易使用。

FOR r in (SELECT DISTINCT NAME 
    FROM MYTABLE 
    ORDER BY NAME DESC) 
LOOP 
    NM := r.NAME; 
    dbms_output.put_line (NM); 
END LOOP; 
+0

好多了!謝謝! – user

相關問題