oracle批量備份表的儲存過程
在一些重大變更前,後都需要備份涉及的重要表,當表很多且備份不是最新的時候,需要drop表,因為oracle沒if exists 這種語法,寫個儲存過程來批量備份,當然也可以把加上引數,不過沒什麼必要,基本知道哪些表需要備份,執行下儲存過程就OK
注意,這邊如果當天存在同名備份表,會drop掉,
create or replace procedure BAK_CRM_PRO as type type_array is varray(20) of varchar2(50); back_tables type_array :=type_array( 'TBL_XXX1', 'TBL_XXX2', 'TBL_XXX3', 'TBL_XXX4', 'TBL_XXX5', 'TBL_XXX6', 'TBL_XXX7', 'TBL_XXX8', 'TBL_XXX9', 'TBL_XXX10' ); bak_name varchar2(100); temp_str varchar2(1000); date_str varchar2(10); temp_num number; temp_num2 number; begin select to_char(sysdate,'mmdd') into date_str from dual; for i in 1..back_tables.count loop bak_name:='BAK_'||date_str||'_'||back_tables(i); if (length(bak_name)>30) then bak_name:=regexp_replace(bak_name,'_([[:alpha:]])[[:alpha:]]+','_\1',8); end if; execute immediate 'select count(1) from user_tables a where a.table_name=:1' into temp_num using bak_name ; dbms_output.put_line('temp_num='||temp_num); if(temp_num=1) then temp_str:='drop table '||bak_name; dbms_output.put_line(temp_str); execute immediate temp_str; end if; temp_str:='create table '||bak_name||' as select * from '||back_tables(i); dbms_output.put_line(temp_str); execute immediate temp_str; temp_num:=1; temp_num2 :=2; execute immediate 'select count(1) from '||back_tables(i) into temp_num; execute immediate 'select count(1) from '||bak_name into temp_num2; dbms_output.put_line('n1='||temp_num||' n2='||temp_num2); if(temp_num=temp_num2) then dbms_output.put_line('back '||bak_name||' success'); end if; end loop; end;
先編譯下儲存,然後呼叫就可以
另外plsql中編譯儲存過程在命令視窗,複製上面的程式碼,然後輸入/ 和回車,就能編譯,當然編譯前需要替換成自己需要備份的表,就是tbl_xxx那部分
這邊用到了dml動態sql,也可以用遊標代替,不太熟悉這個
編譯後執行 在sql視窗執行下面這個就可以
begin
BAK_CRM_PRO_test();
end;
如果不需要這個儲存過程可以刪除
drop procedure BAK_CRM_PRO_test;
相關推薦
oracle批量備份表的儲存過程
在一些重大變更前,後都需要備份涉及的重要表,當表很多且備份不是最新的時候,需要drop表,因為oracle沒if exists 這種語法,寫個儲存過程來批量備份,當然也可以把加上引數,不過沒什麼必要,基本知道哪些表需要備份,執行下儲存過程就OK 注意,這邊如果當天存在同名備
Oracle 批量建函式 儲存過程 指令碼
這段時間開始使用oracle 10G 資料庫,前幾天寫了幾個報表的函式 和儲存過程,然後 把生成的指令碼去 正式庫上執行 ,老是報錯,不知道是怎麼回事, 可能是 SQLserver 用慣了 ,總覺得可以連續執行多個 建函式的 指令碼,但是 始終不行, 偶然的在 網
ORACLE定時任務呼叫儲存過程動態為表新增分割槽
1、建立需要自動分割槽的表 CREATE TABLE TEST(M DATA) PARTITION BY RANGE(M) ( PARTITION TEST_PAR_99991212 VALUES LESS THAN(TO_DATE('12-12-9999','DD-MM-
批量修改Oracle序列值的儲存過程
createorreplaceprocedure P_MODIFY_SEQUENCES is--更新各序列值str_sql varchar2(4000);r boolean;function F_MODIFY_SEQUENCE(sequenceName varchar2,taleName varchar2,k
備份一個批量插入的儲存過程
懶得每次都要重寫 drop procedure if exists insertText; delimiter $ create procedure insertText() BEGIN  
Oracle用定時任務儲存過程將資料轉存到歷史表,提高查詢速度
一、定義儲存過程 CREATE OR REPLACE PROCEDURE Sync_INFO_HISTORY IS BEGIN insert into depart_passenger_info
oracle exp/imp命令詳解(匯入,匯出表,儲存過程,檢視等)
E: >exp help=y 通過輸入 EXP 命令和使用者名稱/口令,您可以 在使用者 / 口令之後的命令: 例項: EXP SCOTT/TIGER 或者,您也可以通過輸入跟有各種引數的 EXP 命令來控制“匯出”的執行方式。 要指定引數,您可以使用關鍵字: 格式: EXP KEYWOR
在PL/SQL Developer和oracle中如何新建儲存過程並呼叫儲存過程
1、新建程式視窗,選擇Procedure 2、寫入procedure以後,要執行程式進行編譯 3、編譯成功以後,有三種方法可以執行procedure 第一種是在命令視窗執行exec procedure name SQL> exec procedure_name();
QT操作Oracle資料庫(事務、儲存過程)
QT操作Oracle資料庫可以使用QODBC、QOCI兩種驅動,這裡使用QODBC驅動。在使用QOCI驅動操作oracle時,事務不能回滾,可能是我編譯的QOCI驅動有問題,但是暫時沒有找到原因。 #ifndef QTTEST_H #define QTTEST_H #include <
oracle 批量刪除表table、sequence,匯入等
1、拼接 刪除表sql,語句執行即可 select 'drop table '||table_name||';' as sqlscript from user_tables; 2、匯入table imp account/[email protected] file=d:/d
Oracle與Mysql建立儲存過程
<1>Oracle如下: create or replace procedure aa //建立無參儲存過程 is begin for i in 1…100000 loop //定義迴圈 insert into jz(jz_object_id,cid,customer_id,co
MySQL儲存過程中的3種迴圈,儲存過程的基本語法,ORACLE與MYSQL的儲存過程/函式的使用區別,退出儲存過程方法
學無止境 部落格園 首頁 新隨筆 聯絡 訂閱 管理 隨筆-1968 評論-103 文章-4&
Oracle job 定時執行 儲存過程
一:簡單測試job的建立過程案例: 1,先建立一張JOB_TEST表,欄位為a 日期格式 SQL> create table JOB_TEST(a date); Table created SQL> commit; Commit complete
Oracle通過Job呼叫儲存過程
這是本人第一次處理Oracle的儲存過程以及計劃任務(job)的事情;期間遇到了很多問題在此將這次試用job呼叫自己的編寫的儲存過程的過程中遇到的問題做一總結; 任務:實時採集系統會每5分鐘給中心繫統傳送一個流量資料,但是沒有給出累計流量資料; 1、編寫一個儲存過程W
【Oracle】PL/SQL 儲存過程 顯式遊標、隱式遊標、動態遊標
【Oracle】PL/SQL 顯式遊標、隱式遊標、動態遊標 2013年06月17日 09:02:51 AlphaWang 閱讀數:13009更多 個人分類: 【Database】 在PL/SQL塊中執行SELECT、INSERT、DELET
oracle 函式中呼叫儲存過程
專案中開發了一個儲存過程來給報表提供資料來源,而程式業務邏輯中需要有一個對該資料來源進行判斷的功能,開始是使用拼接sql的方式在儲存過程中對應sql的外面包裝一層來進行處理,但是覺得這種方式拼接的sql太長,而且以後業務邏輯改變要同時修改儲存過程和程式碼,容易發生遺漏,
oracle 動態SQL在儲存過程中的使用
1、 靜態SQL和動態SQLOracle編譯PL/SQL程式塊分為兩個種(其它SQL程式碼塊包括儲存過程也是如此):其一為前期聯編(early binding),即SQL語句在程式編譯期間就已經確定,大多數的編譯情況屬於這種型別;另外一種是後期聯編(late bin
Oracle PL/SQL程式設計-儲存過程優缺點及實現過程【1】
如果儲存過程名已經被佔用,兩種方式:1.修改儲存過程名;2新增關鍵字 or replace :表示如果有yao_prol,就替換。eg:SQL> create or replace procedure yao_prol is 2 begin 3 insert into YAO_T
Oracle定時任務執行儲存過程帶引數
儲存過程: create or replace procedure pro_test (retCode out number, retMsg out varchar2) is vcrm v_prod_inst%ROWTYPE; TYPE ref_cursor_type I
Oracle建立和呼叫儲存過程,函式,檢視
【1】Oracle建立和呼叫儲存過程1:寫一個簡單的例子刪除三級級聯 1)create or replace procedure ww_procedure_servicecheck (V_ID IN NUMBER)-- 定義輸入變數 IS begin DELETE