废话少说,问题如下--创建测试表
create table test(
num1 number(4),
num2 number(4)
)--插入数据
insert into test values(1,1);
insert into test values(1,2);
insert into test values(1,3);
insert into test values(2,1);
insert into test values(2,2);
insert into test values(2,3);
insert into test values(3,1);
insert into test values(3,2);
insert into test values(3,3);
--插入重复项 
insert into test values(1,1);
insert into test values(1,1);
insert into test values(2,3);问题:查询所有重复的项.不能使用表内的字段名,如: select * from test where num1=1 and num2=2;
可以使用到任何表上,只需换掉表名即可,可以使用伪列rowid等

解决方案 »

  1.   

    select num1, num2 from test group by num1, num2 having count(*)>1不知道是否满足你的条件
      

  2.   

    --在Test窗口执行,参数:table_name (string 类型)为表名如test, :result_cur 为返回结果游标(Cursor类型)
    DECLARE
      strTable VARCHAR2(50):= UPPER(:table_name);
      CURSOR cur IS
        SELECT c.column_name
        FROM   All_Tab_Cols c
        WHERE  c.table_name = strTable;
      strGroup VARCHAR2(200) := '';
      strSql   VARCHAR2(2000) := 'select * from ' || strTable;BEGIN
      FOR cur_row IN cur
      LOOP
        strGroup := strGroup || cur_row.column_name || ', ';
      END LOOP;  IF strGroup IS NOT NULL THEN
        strSql := strSql || ' group by ' || TRIM(TRAILING ',' FROM TRIM(strGroup)) ||
                  ' having count(*) > 1';
      END IF;  OPEN :result_cur FOR strSql;
    END;
      

  3.   

    dragon188(兰若寺) ( ) 
    这个,我想该可以用字段名,但是字段名如果多了的话,一样也查不出来
    比方说,你用了num1和num2,如果这时候换张表,表里多了个num3,或者多了num3,num4,你又怎么查,这时候知道字段名也是没有的另外一楼大哥和二楼大哥,你们换张表试过吗,加几个字段名再查查,结果
      

  4.   

    一楼大哥查出来的结果是
         num1   num2
     1      1      1
     2      2      1
     3      3      1
    而正确答案是 num1=1,num2=1 有三个重复行
                 num1=3,num2=1 有二个重复行
      

  5.   

    看错了,一楼的答案是正确的,才发现我的数据插入有错,汗二楼答案比较好,把表的所有字段名全查出来,再 group by,高手!游标写得非常的淫荡!
    OK!给分!