2017-10-09 33 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

相关问题