Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建在循环中输出不同名称的Oracle PL/SQL过程_Sql_Oracle_Plsql_Procedure - Fatal编程技术网

创建在循环中输出不同名称的Oracle PL/SQL过程

创建在循环中输出不同名称的Oracle PL/SQL过程,sql,oracle,plsql,procedure,Sql,Oracle,Plsql,Procedure,我刚开始学习PL/SQL,所以,请友好一点。 我有一个简单的问题,我想从表中提取不同的名称。 当我这样做时,在循环中,我将对每个不同的名称执行一些其他操作 我一直在研究如何在循环中获得唯一的名称。我所做的不是工作,因为如果我有: 1 MARY 2 MARY 3 JOHN 我正在输出: MARY MARY 而不是: MARY JOHN 这是我的代码: create or replace PROCEDURE CREATE_TABLE ( NM OUT VARCHAR2, tot OUT N

我刚开始学习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;

我会使用隐式游标循环,它们非常容易使用

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

选择DISTINCT NAME,ROWNUM rnum是问题的根源-因为ROWNUM对于所有记录都是唯一的,所以DISTINCT是reduntant。您从子查询中得到了2个Mary,第一个是rownum 1,第二个是rownum 2。为什么在这里使用rownum?我不明白你的意图。对于每个唯一的名称,我需要做一些操作,与其他表连接,等等。。我所需要的就是有一个循环,在这个循环中,每次提取一个不同的名称。所以,在本例中,我想要MARY,然后是JOHN,这样我就可以,例如,加入另一个具有与JOHN或MARY相关的其他属性的表。这样更好!谢谢