【发布时间】:2017-10-09 16:22:42
【问题描述】:
我刚开始使用 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;
【问题讨论】:
-
SELECT DISTINCT NAME, ROWNUM rnum是您的问题的根源 - 因为 rownum 对于所有记录都是唯一的,所以DISTINCT是多余的。您从子查询中获得了 2 个Mary,第一个是 rownum 1,第二个是 rownum 2。为什么在这里使用rownum?我不明白你的意图。 -
对于每个唯一名称我需要做一些操作(加入其他表等)。我所需要的只是有一个循环,并在该循环内一次提取一个不同的名称。所以,在这种情况下,我想要 MARY,然后是 JOHN,这样我就可以加入另一个表,该表具有与 JOHN 或 MARY 相关的其他属性。
标签: sql oracle plsql procedure