当前位置:Gxlcms > 数据库问题 > oracle 提供的package对开发者的支持[重要](七)

oracle 提供的package对开发者的支持[重要](七)

时间:2021-07-01 10:21:17 帮助过:13人阅读


D:\oracle11g\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN

-- dbms_output 从数据库缓存中取数据
1.put , put_line
2.get ,get_line
3.开启显示 :SET serveroutput ON;


-- utl_file

-- 读写文件

1 f:=fopen(dir,FILE,r); -- 读文件
2 get_line(f,buf,LEN); -- 读一行
3 fclose(f) -- 关闭文件
4 put(f,buf)
5 put_line(f,buf) -- 写入文件
6 f:=fopen(dir,FILE,w); -- 只写的方式写文件
7 f:=fopen(dir,FILE,a); -- 追加写方式

 

-- utl_file 读写文件的错误

1 invalid_path
2 invalid_mode
3 invalid_filehandle
4 invalid_operation
5 read_error
6 write_error
7 internal_error

 

-- 通用错误

1 NO_data_found
2 value_error

 

----utl_file 操作文件的例子
--- 准备工作

1 / AS SYSDBA; -- 需要dba权限
2 CREATE DIRECTORY my_dir AS C:\dir; -- 创建目录
3 GRANT READ,WRITE ON DIRECTORY my_dir TO PUBLIC -- 授权目录
4 SHOW parameter utl_file_dir; --查看系统变量 (没有)
5 ALTER SYSTEM SET utl_file_dir = C:\dir SCOPE=SPFILE; -- 更改系统参数
6 [SCOPE = SPFILE/memory/BOTH]
7 SHUTDOWN IMMEDIATE; -- 关闭数据库
8 startup -- 启动数据库
9 SHOW parameter utl_file_dir; --查看系统变量 (已经生效)

 

-- 建立存储过程

 

 1 CREATE OR REPLACE PROCEDURE sal_status(
 2    dir IN VARCHAR2,
 3    filename IN VARCHAR2
 4 ) IS
 5 FILE utl_file.file_type;
 6   CURSOR empc IS SELECT last_name,salary,department_id FROM employees ORDER BY  department_id; -- 表中记录
 7   newdeptno employees.department_id%TYPE; --新的部门号
 8   olddeptno employees.department_id%TYPE := 0; --旧的部门号
 9 BEGIN
10   FILE := utl_file.fopen(dir,filename ,w); -- 打开文件
11   utl_file.put_line(file,report:generated on  || SYSDATE); -- 写入内容
12   utl_file.new_line(FILE); -- 新建一行
13   FOR emp_rec IN empc LOOP  -- 循环员工记录
14     IF emp_rec.department_id <> olddeptno THEN   -- 记录部门值<>旧部门
15       utl_file.put_line(FILE,department: || emp_rec.department_id);  --新追加一行
16     END IF;
17     utl_file.put_line(FILE,employee: || emp_rec.last_name ||  earns : || emp_rec.salary); -- 追加日志
18     olddeptno := emp_rec.department_id; --旧部门值更新
19   END LOOP;
20   utl_file.put_line(FILE,xxxend ofreportxxx);
21   utl_file.fclose(FILE);
22   EXCEPTION
23     WHEN utl_file.invalid_filehandle THEN
24      raise_application_error(-20001,invalid file);
25     WHEN utl_file.write_error THEN
26      raise_application_error(-20002,unable to be write);
27 END sal_status;

 

 

 

-- 运行问题

execute sal_status(MY_DIR,salreport.txt);


-- 报错

1 SQL> execute sal_status(MY_DIR,salreport.txt);
2 begin sal_status(MY_DIR,salreport.txt); end;
3 ORA-29283: invalid file operation
4 ORA-06512: at "SYS.UTL_FILE", line 536
5 ORA-29283: invalid file operation
6 ORA-06512: at "HR.SAL_STATUS", line 10
7 ORA-06512: at line 1


-- 原因

C:\dir 的dir目录需手动创建,oracle并不检查文件夹是否已经存在.

 

oracle 提供的package对开发者的支持[重要](七)

标签:proc   mode   logs   rtm   cat   11g   _id   spfile   文件的   

人气教程排行