首页 > 代码库 > oracle 提供的package对开发者的支持[重要](七)
oracle 提供的package对开发者的支持[重要](七)
1.dbms_alert -- 消息传输的包
2.dbms_lock -- 锁的处理 oracle lock management service
3.dbms_session -- session级别的命令
4.dbms_output -- 输出结果
5.htp -- 数据库缓存中写html - 创建简单的web页面
6.utl_file --与操作系统文本文件交互
7.utl_mail -- 收发邮件
8.dbms_scheduler -- 定期执行pl/sql代码 - job
oracle自带的脚本存放路径:
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对开发者的支持[重要](七)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。