问题描述:
有一个文件,我通过外部表访问它,通过关键字找到其中我需要的数据。
例如通过关键字我找到了3条数据,分别在文件的第10、15、20行,但是我不但需要这3条数据,还需要这3条数据的上一条数据,即我最终需要第9、10,14、15,19、20这6条数据。想通过给外部表增加一个自增长的ID字段,来定位每条数据的行号,但是没研究出来怎么给外部表增加自增长列,不知道是否支持?大家有没有其它好方法啊?谢谢!

解决方案 »

  1.   

    --在c:\创建两个文本文件
    1.dat:
    7301,SMITH,CLERK,7902,17-DEC-80,100,0,20
    7402,ALLEN,SALESMAN,7698,20-FEB-81,250,0,30
    7503,WARD,SALESMAN,7698,22-FEB-81,450,0,30
    7504,JONES,MANAGER,7839,02-APR-81,1150,0,20
    2.dat:
    7611,MARTIN,SALESMAN,7698,28-SEP-81,1250,0,30
    7612,BLAKE,MANAGER,7839,01-MAY-81,1550,0,30
    7913,MILLER,CLERK,7782,23-JAN-82,3500,0,10--创建目录对象
    CREATE DIRECTORY DIR_TEST AS 'C:\';--创建外部表
    CREATE TABLE EXT1(
        emp_id number(4), 
        ename varchar2(12), 
        job varchar2(12) , 
        mgr_id number(4) , 
        hiredate date, 
        salary number(8), 
        comm number(8), 
        dept_id number(2)
      ) 
      ORGANIZATION EXTERNAL(
        TYPE ORACLE_LOADER 
        DEFAULT DIRECTORY DIR_TEST
        ACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINE 
        FIELDS TERMINATED BY ',') 
        LOCATION('1.DAT','2.DAT')
      );--查询薪水部门薪水第一高和第二高的
    SELECT *
      FROM (SELECT t.*, row_number() over(PARTITION BY t.dept_id ORDER BY t.salary DESC) rn FROM ext1 t)
     WHERE (rn = 1 OR rn = 2);
      

  2.   

    --用子查询实现 
    select * from 
    (
    select rownum as id,a.* from ext_table a
    )