動態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 列印訊息體...