首页 > 解决方案 > 如何写入和读取文件

问题描述

我是新手!在在线课程上,这是这样的任务)我将创建目录的权限授予用户并创建了目录。

create or replace directory files_one as 'C:/oracle18c/app/oracle/product/18.2.0/files_one';

如何编写一个程序,将部门名称和该部门的工资金额记录在一个文件中。另外,还有一个从该文件中读取数据并通过 dbms_output 显示的过程。结果是一个将数据从此代码写入文件的过程

 select  d.department_name, sum(e.salary)
  from employees e, departments d 
  where  d.DEPARTMENT_ID=e.DEPARTMENT_ID
  group by d.department_name; 
create or replace procedure emp_deps as 
  cursor depts_emp is 
    select  d.department_name, sum(e.salary)
    from employees e, departments d 
    where  d.DEPARTMENT_ID=e.DEPARTMENT_ID
    group by d.department_name; 

  fHandl UTL_FILE.FILE_TYPE; 
  begin 
    fHandle := UTL_FILE.FOPEN('/C:/oraclexe/app/oracle/product/10.2.0/files_one','A');
    for cur_rec in depts_emp loop
      UTL_FILE.PUT_LINE(fHandle, cur_rec.d.department_name||','||cur_rec. sum(e.salary));
    end loop;
   UTL_FILE.FCLOSE(fHandle);

   EXCEPTION
  WHEN OTHERS THEN
    UTL_FILE.FCLOSE(fHandle);
    RAISE;
END;
department_id department_name  
------------- ---------------- 
10            Administration   
20            Marketing        
30            Purchasing       
40            Human Resources  
50            Shipping
...
270           Payroll  
employee_id   last_name  salary departments_id
------------- ---------- ------ --------------
100           King       24000  90  
101           Kochhar    17000  90  
102           De Haan    17000  90  
103           Hunold     9000   60  
104           Ernst      6000   60 
...
206           William    8300   110

标签: sqloracleplsql

解决方案


您需要在UTL_FILE.FOPEN方法中提供目录名称,如下所示:

fHandle := UTL_FILE.FOPEN('FILES_ONE', -- directory name
                          'files_one.txt', -- file name that you want to create or append data to
                          'A'); -- mode of writing

要从文件中读取数据,您需要使用SqlLoaderor External table。您可以从 oracle 文档中了解它。


推荐阅读