本帖最后由 strive_bo 于 2012-09-04 14:52:31 编辑

解决方案 »

  1.   

    SQL> select * from test_col;COL_NAME
    --------------------------------------------------------------------------------
    1
    2
    22
    33
    1
    中国
    日本
    米国
    韓国9 rows selectedSELECT n.col_name
      FROM (SELECT m.col_name,
                   m.keyword,
                   COUNT(*) OVER(PARTITION BY m.rid, m.keyword) cnt1,
                   COUNT(*) OVER(PARTITION BY m.keyword) cnt2
              FROM (SELECT t1.ROWID rid,
                           t1.col_name,
                           SUBSTR(t1.col_name, t2.rn, 1) keyword
                      FROM test_col t1,
                           (SELECT ROWNUM rn,
                                   max_len
                              FROM (SELECT MAX(LENGTH(col_name)) max_len
                                      FROM test_col)
                            CONNECT BY ROWNUM <= max_len) t2
                     WHERE LENGTH(t1.col_name) >= rn) m) n
     WHERE n.cnt1 <> n.cnt2COL_NAME
    --------------------------------------------------------------------------------
    1
    1
    2
    22
    22
    中国
    米国
    韓国8 rows selected如果表数据大,存储过程效率比SQL要好。