PLSQL內建工具包

2021-08-26 14:52:16 字數 3046 閱讀 5714

動態sql:不是在designer time寫的sql, 而是可以在執行時臨時拼接起來的sql語句

例如:create or replace procedure delete_all_rows

(p_tab_name in varchar2, p_rows_del out number)

iscursor_name integer;

begin

cursor_name := dbms_sql.open_cursor;

dbms_sql.parse(cursor_name, 'delete from '||p_tab_name,

dbms_sql.native );

p_rows_del := dbms_sql.execute (cursor_name);

dbms_sql.close_cursor(cursor_name);

end;

動態sql可以使用oracle 內建包 dbms_sql 來執行,也可以使用execute immediate 語句來執行:

例如:create procedure del_rows

(p_table_name in varchar2,

p_rows_deld out number)

isbegin

execute immediate 'delete from '||p_table_name;

p_rows_deld := sql%rowcount;

end;

動態sql好處: 在某些應用環境中可以做到靈活配置,避免因為新增一種業務而更改**或者新建**;

程式中執行ddl:

如果想在程式中執行ddl,可使用oracle 內建包:dbms_ddl

比如在程式中執行資料收集命令:

dbms_ddl.analyze_object('table','a_user','jobs','compute'【收集指令】)

oracle資料庫job:

定義job 可以定期執行某個程式,

應用場景:比如每隔一周對某些表進行資料收集,以確保cbo正確,又比如在訊息處理機制中,每隔5分鐘對 訊息佇列進行掃瞄處理等。

oracle提供內建包 dbms_job,可完成job的定義、提交、更改、停止、移除。

例如:declare jobno number;

begin

dbms_job.submit ( job => jobno ,

what => 'over_pack.add_dept(''education'',2710);',——what值為執行語句,語句中帶引號的再加個單引號以視區分

next_date => trunc(sysdate + 1),

interval => 'trunc(sysdate + 1)' ); ————間隔1天更新一次

dbms_output.put_line(„job_no =„ || jobno )

commit;

end;

更改job的執行頻率:

例如:每4小時執行一次

begin

dbms_job.change(1, null, trunc(sysdate+1)+6/24, ‟sysdate+4/24');

end;

如何找到自己提交的job號:

select job, log_user, next_date, next_sec, broken, what from dba_jobs;

plsql中讀寫外部檔案:

oracle 提供內建包utl_file來讀寫外部檔案,其一般處理過程為:

utl_file 應用舉例:

create or replace procedure sal_status

(p_filedir in varchar2, p_filename in varchar2)

isv_filehandle utl_file.file_type;

cursor emp_info is

select last_name, salary, department_id

from employees

order by department_id;

v_newdeptno employees.department_id%type;

v_olddeptno employees.department_id%type := 0;

begin

v_filehandle := utl_file.fopen (p_filedir, p_filename,'w');

utl_file.putf (v_filehandle,'salary report: generated on

%s\n', sysdate); utl_file.new_line (v_filehandle);

for v_emp_rec in emp_info loop

v_newdeptno := v_emp_rec.department_id;

if v_newdeptno <> v_olddeptno then

utl_file.putf (v_filehandle, 'department: %s\n',

v_emp_rec.department_id);

end if;

utl_file.putf (v_filehandle,' employee: %s earns: %s\n',

v_emp_rec.last_name, v_emp_rec.salary);

v_olddeptno := v_newdeptno;

end loop;

utl_file.put_line (v_filehandle, '*** end of report ***');

utl_file.fclose (v_filehandle);

exception when utl_file.invalid_filehandle then

when utl_file.write_error then

end sal_status;

拷貝工具包

常用工具包封裝.懶得引各種雜七八的包,輕量級包.cglib還是需要的 scope provided 1.0.0 copyutils beancopier封裝.提供簡單的單一複製與list複製.不支援自定義建構函式的類的複製.abc abc copyutil copysigle abc class o...

Linux VMware tools工具包的安裝

啟動vm中的linux,選擇vmware workstation程式選單中vm install vmware tools.執行 mkdir mnt cdrom mount o ro dev cdrom mnt cdrom vmtools的安裝檔案放在vmware虛擬的cdrom中,首先要mount上...

Android 日誌工具包

1 實現效果圖 效果圖.png 2 實現思路 3 邊框繪製 邊框實際上也是以字串的形式列印 4 列印執行緒資訊 log.println priority,mtag,horizontal line thread thread.currentthread getname 5 列印堆疊資訊 6 列印訊息體...