我有一个由千行组成的文件,我需要得到第二行的一部分(大约50个字符)和文件的最后一行。请指教。谢谢。
我想做点什么……
在Oracle 11g中
select col from ( select rownum AS rnum, LEFT(myCol, 50) col from Table1 where Rownum < 3 ) WHERE rnum = 2
在Oracle 12c中
select LEFT(mycol, 50) col from Table1 ORDER BY val OFFSET 2 ROWS FETCH NEXT 1 ROWS ONLY;
对于最后一行
select LEFT(mycol, 50) col from my_table where pk = ( select max(pk) from my_table )
然后你可以结合他们
这是一个例子。
目录名称&amp;它的位置,以及示例文件内容:
SQL> select directory_name, directory_path from all_directories; DIRECTORY_NAME DIRECTORY_PATH ------------------------------ -------------------- EXT_DIR c:\temp SQL> $type c:\temp\sofile.txt 0246608377|22795124004| 650930363|1-8IGO3S82920| 0245563264|22669075004| 0245563264|22669075004| 164260364|1-2DFE-6573219| 650821459|1-6HWQUF11209| SQL>
程序:当地柜台( l_cnt )知道行号;如果等于 2 ,显示那一行。此外,当没有找到任何内容时(执行异常处理程序部分),我已经到达文件的末尾,所以我也显示了最后一行。
l_cnt
2
SQL> set serveroutput on SQL> SQL> declare 2 l_file utl_file.file_type; 3 l_dir varchar2(20) := 'EXT_DIR'; 4 l_name varchar2(20) := 'sofile.txt'; 5 l_line varchar2(50); 6 l_cnt number := 0; 7 begin 8 l_file := utl_file.fopen (l_dir, l_name, 'R'); 9 loop 10 begin 11 utl_file.get_line(l_file, l_line); 12 l_cnt := l_cnt + 1; 13 if l_cnt = 2 then 14 dbms_output.put_line('2nd : ' || l_line); 15 end if; 16 exception 17 when no_data_found then 18 dbms_output.put_line('last: ' || l_line); 19 exit; 20 end; 21 end loop; 22 utl_file.fclose(l_file); 23 end; 24 / 2nd : 650930363|1-8IGO3S82920| last: 650821459|1-6HWQUF11209| PL/SQL procedure successfully completed. SQL>