oracle 提供的package對開發者的支持[重要](七)
阿新 • • 發佈:2017-07-08
讀寫 沒有 stat 顯示 alt creat replace 權限 eat
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 ONDIRECTORY 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對開發者的支持[重要](七)