欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

oracle存儲過程創(chuàng)建表分區(qū)實例

 更新時間:2013年11月11日 10:44:11   投稿:zxhpj  
二種oracle存儲過程創(chuàng)建表分區(qū)實例

用存儲過程創(chuàng)建數(shù)據(jù)表:
創(chuàng)建時注意必須添加authid current_user,如果創(chuàng)建的表已存在,存儲過程繼續(xù)執(zhí)行,但如不不加此關(guān)鍵語句,存儲過程將出現(xiàn)異常,
這個語句相當于賦權(quán)限。
例1
創(chuàng)建語句如下:

復(fù)制代碼 代碼如下:

create or replace
procedure sp_create_mnl(i_id varchar2) authid current_user  as
  /*********************************
名稱:sp_create_mnl
功能描述:創(chuàng)建模擬量歷史數(shù)據(jù)存儲表
 
修訂記錄:
版本號   編輯時間  編輯人  修改描述
1.0.0    2012-9-20 wylaok  1.創(chuàng)建此存儲過程
1.0.1    2012-9-21 wylaok  2.修改表名稱及變量名稱,增加必要注釋
 
入?yún)⒊鰠⒚枋觯?br />i_id 測點編號
**********************************/
      v_tablename varchar2(30);--表名
      v_flag number(10,0);
      v_sqlfalg varchar(200);
begin
  v_flag:=0;
      v_tablename:=CONCAT('MNL', UPPER(i_id));
      v_sqlfalg:='select count(*) from user_TABLES where table_name='''||v_tablename||'''';
      dbms_output.put_line(v_sqlfalg);
      execute immediate v_sqlfalg into v_flag;
      if v_flag=0 then  --如果沒有這個表 則去創(chuàng)建
         begin
  execute immediate 'create table '||v_tablename ||'
  ( DATETIME DATE,
  MIN00    FLOAT,
  AGV00    FLOAT,
  MAX00    FLOAT,
  MIN05    FLOAT,
  AVG05    FLOAT,
  MAX05    FLOAT,
  MIN10    FLOAT,
  AGV10    FLOAT,
  MAX10    FLOAT,
  MIN15    FLOAT,
  AGV15    FLOAT,
  MAX15    FLOAT,
  MIN20    FLOAT,
  AGV20    FLOAT,
  MAX20    FLOAT,
  MIN25    FLOAT,
  AGV25    FLOAT,
  MAX25    FLOAT,
  MIN30    FLOAT,
  AGV30    FLOAT,
  MAX30    FLOAT,
  MIN35    FLOAT,
  AGV35    FLOAT,
  MAX35    FLOAT,
  MIN40    FLOAT,
  AGV40    FLOAT,
  MAX40    FLOAT,
  MIN45    FLOAT,
  AGV45    FLOAT,
  MAX45    FLOAT,
  MIN50    FLOAT,
  AGV50    FLOAT,
  MAX50    FLOAT,
  MIN55    FLOAT,
  AGV55    FLOAT,
  MAX55    FLOAT,
  MINV     FLOAT,
  MAXV     FLOAT,
  AVGV     FLOAT,
  MAXTIME  DATE,
  MINTIME  DATE
  )
  tablespace WYG
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 512K
    next 512K
    minextents 1
    maxextents unlimited
    pctincrease 0
  )';
  --    execute immediate sqlstr;
         end;
      end if;
      end;

調(diào)用此存儲過程:
復(fù)制代碼 代碼如下:

begin
  createmnl('mnl_14');
  end;

例2
復(fù)制代碼 代碼如下:

CREATE OR REPLACE PROCEDURE BIP_MMS_PARTITION_PROC AS
 
  v_Mms_Task_Tab    VARCHAR2(50); --表名
  v_Mms_Content_Tab VARCHAR2(50);
  v_Mms_User_Tab    VARCHAR2(50);
  v_TableSpace      VARCHAR2(20); --表空間
  v_PartPreFlag     VARCHAR2(50); --分區(qū)名標識
  v_SqlCursor       NUMBER; --游標
  v_SqlExec         VARCHAR2(2000); --執(zhí)行語句
  v_PartPreDate     VARCHAR2(20); --分區(qū)日期
  v_RangeValue      NUMBER;
  v_RangeDate       NUMBER;
  v_Rows            NUMBER(30) := 0;
  v_Num             NUMBER(30) := 0;
  vErrInfo          VARCHAR2(200);
  p_DateFrom        NUMBER;
  p_PartNum         NUMBER;
  p_Range           NUMBER;
BEGIN
 
  v_Mms_Task_Tab    := 'BIP_MMS_MT_TASK_LOG_TAB_TEST';
  v_Mms_Content_Tab := 'BIP_MMS_MT_CONTENT_TAB_TEST';
  v_Mms_User_Tab    := 'BIP_MMS_MT_USER_LOG_TAB_TEST';
  -- 讀取配置參數(shù)
  BEGIN
    SELECT TO_NUMBER(VALUE)
      INTO p_DateFrom
      FROM BIP_OTHERS_PROPERTIES_TAB
     WHERE NAME = 'p_DateFrom';
    SELECT TO_NUMBER(VALUE)
      INTO p_PartNum
      FROM BIP_OTHERS_PROPERTIES_TAB
     WHERE NAME = 'p_PartNum';
    SELECT TO_NUMBER(VALUE)
      INTO p_Range
      FROM BIP_OTHERS_PROPERTIES_TAB
     WHERE NAME = 'p_Range';
  EXCEPTION
    WHEN OTHERS THEN
      BEGIN
        p_DateFrom := 0;
        p_PartNum  := 1;
        p_Range    := 180;
      END;
  END;
  --記錄存儲過程添加分區(qū)
  INSERT INTO BIP_LOG_STAT_EXEC_TAB
  VALUES
    (TO_CHAR(SYSDATE, 'yyyymmddhh24miss'),
     'BIP_MMS_PARTITION_PROC_ADD',
     'BEGIN');
  COMMIT;
  --ADD PARTITION 
  FOR i IN 1 .. p_PartNum LOOP
    --BIP_MMS_MT_CONTENT_TAB 添加分區(qū)
    v_PartPreDate := TO_CHAR(SYSDATE + p_DateFrom + i, 'YYYYMMDD');
    dbms_output.put_line(v_PartPreDate);
    v_Num         := 0;
    v_TableSpace  := 'BIP_MMS_TS_TEST';
    v_PartPreFlag := 'MMS_MT_CONTENT';
    SELECT COUNT(*)
      INTO v_Num
      FROM user_tab_partitions
     WHERE table_name = v_Mms_Content_Tab
       AND SUBSTR(partition_name, 16, 8) = v_PartPreDate;
    IF v_Num < 1 THEN
      v_RangeDate  := TO_CHAR(SYSDATE + p_DateFrom + i, 'YYYYMMDD');
      v_RangeValue := v_RangeDate || '240000';
      dbms_output.put_line(v_RangeValue);
      v_SqlExec := 'ALTER TABLE ' || v_Mms_Content_Tab || ' ADD PARTITION ' ||
                   v_PartPreFlag || '_' || v_PartPreDate ||
                   ' VALUES LESS THAN(''' || v_RangeValue ||
                   ''') TABLESPACE ' || v_TableSpace;
      dbms_output.put_line(v_SqlExec);
      v_SqlCursor := DBMS_SQL.OPEN_CURSOR;
      DBMS_SQL.PARSE(v_SqlCursor, v_SqlExec, DBMS_SQL.NATIVE);
      v_Rows := DBMS_SQL.EXECUTE(v_SqlCursor);
      DBMS_SQL.CLOSE_CURSOR(v_SqlCursor);
    END IF;
    --BIP_MMS_MT_TASK_LOG_TAB_TEST 添加分區(qū)
    v_PartPreDate := TO_CHAR(SYSDATE + p_DateFrom + i, 'YYYYMMDD');
    v_Num         := 0;
    v_TableSpace  := 'BIP_MMS_TS_TEST';
    v_PartPreFlag := 'MMS_MT_TASK_LOG';
    SELECT COUNT(*)
      INTO v_Num
      FROM user_tab_partitions
     WHERE table_name = v_Mms_Task_Tab
       AND SUBSTR(partition_name, 17, 8) = v_PartPreDate;
    IF v_Num < 1 THEN
      v_RangeDate  := TO_CHAR(SYSDATE + p_DateFrom + i, 'YYYYMMDD');
      v_RangeValue := v_RangeDate || '240000';
      v_SqlExec    := 'ALTER TABLE ' || v_Mms_Task_Tab || ' ADD PARTITION ' ||
                      v_PartPreFlag || '_' || v_PartPreDate ||
                      ' VALUES LESS THAN(''' || v_RangeValue ||
                      ''') TABLESPACE ' || v_TableSpace;
      dbms_output.put_line(v_SqlExec);
      v_SqlCursor := DBMS_SQL.OPEN_CURSOR;
      DBMS_SQL.PARSE(v_SqlCursor, v_SqlExec, DBMS_SQL.NATIVE);
      v_Rows := DBMS_SQL.EXECUTE(v_SqlCursor);
      DBMS_SQL.CLOSE_CURSOR(v_SqlCursor);
    END IF;
    --BIP_MMS_MT_USER_LOG_TAB_TEST 添加分區(qū)
    v_PartPreDate := TO_CHAR(SYSDATE + p_DateFrom + i, 'YYYYMMDD');
    v_Num         := 0;
    v_TableSpace  := 'BIP_MMS_TS_TEST';
    v_PartPreFlag := 'MMS_MT_USER_LOG';
    SELECT COUNT(*)
      INTO v_Num
      FROM user_tab_partitions
     WHERE table_name = v_Mms_User_Tab
       AND SUBSTR(partition_name, 17, 8) = v_PartPreDate;
    IF v_Num < 1 THEN
      v_RangeDate  := TO_CHAR(SYSDATE + p_DateFrom + i, 'YYYYMMDD');
      v_RangeValue := v_RangeDate || '240000';
      v_SqlExec    := 'ALTER TABLE ' || v_Mms_User_Tab || ' ADD PARTITION ' ||
                      v_PartPreFlag || '_' || v_PartPreDate ||
                      ' VALUES LESS THAN(''' || v_RangeValue ||
                      ''') TABLESPACE ' || v_TableSpace;
      dbms_output.put_line(v_SqlExec);
      v_SqlCursor := DBMS_SQL.OPEN_CURSOR;
      DBMS_SQL.PARSE(v_SqlCursor, v_SqlExec, DBMS_SQL.NATIVE);
      v_Rows := DBMS_SQL.EXECUTE(v_SqlCursor);
      DBMS_SQL.CLOSE_CURSOR(v_SqlCursor);
    END IF;
  END LOOP;
  COMMIT;
 
  INSERT INTO BIP_LOG_STAT_EXEC_TAB
  VALUES
    (TO_CHAR(SYSDATE, 'yyyymmddhh24miss'), 'BIP_MMS_PARTITION_PROC_ADD', 'END');
  COMMIT;
 
  --DELETE PARTITION
  INSERT INTO BIP_LOG_STAT_EXEC_TAB
  VALUES
    (TO_CHAR(SYSDATE, 'yyyymmddhh24miss'),
     'BIP_MMS_PARTITION_PROC_DEL',
     'BEGIN');
  COMMIT;
 
  BEGIN
    v_PartPreFlag := 'MMS_MT_CONTENT' || '_' ||
                     TO_CHAR(SYSDATE - p_Range, 'yyyymmdd');
    dbms_output.put_line(v_PartPreFlag);
    v_SqlExec := 'ALTER TABLE ' || v_Mms_Content_Tab ||
                 ' TRUNCATE PARTITION ' || v_PartPreFlag;
    dbms_output.put_line(v_SqlExec);
    v_SqlCursor := DBMS_SQL.OPEN_CURSOR;
    DBMS_SQL.PARSE(v_SqlCursor, v_SqlExec, DBMS_SQL.NATIVE);
    v_Rows := DBMS_SQL.EXECUTE(v_SqlCursor);
    DBMS_SQL.CLOSE_CURSOR(v_SqlCursor);
    dbms_output.put_line(v_PartPreFlag || ' truncated');
   
    v_SqlExec := 'ALTER TABLE ' || v_Mms_Content_Tab || ' DROP PARTITION ' ||
                 v_PartPreFlag;
    dbms_output.put_line(v_SqlExec);
    v_SqlCursor := DBMS_SQL.OPEN_CURSOR;
    DBMS_SQL.PARSE(v_SqlCursor, v_SqlExec, DBMS_SQL.NATIVE);
    v_Rows := DBMS_SQL.EXECUTE(v_SqlCursor);
    DBMS_SQL.CLOSE_CURSOR(v_SqlCursor);
    dbms_output.put_line(v_PartPreFlag || ' dropped');
  END;
 
  BEGIN
    v_PartPreFlag := 'MMS_MT_TASK_LOG' || '_' ||
                     TO_CHAR(SYSDATE - p_Range, 'yyyymmdd');
    dbms_output.put_line(v_PartPreFlag);
    v_SqlExec := 'ALTER TABLE ' || v_Mms_Task_Tab || ' TRUNCATE PARTITION ' ||
                 v_PartPreFlag;
    dbms_output.put_line(v_SqlExec);
    v_SqlCursor := DBMS_SQL.OPEN_CURSOR;
    DBMS_SQL.PARSE(v_SqlCursor, v_SqlExec, DBMS_SQL.NATIVE);
    v_Rows := DBMS_SQL.EXECUTE(v_SqlCursor);
    DBMS_SQL.CLOSE_CURSOR(v_SqlCursor);
    dbms_output.put_line(v_PartPreFlag || ' truncated');
   
    v_SqlExec   := 'ALTER TABLE ' || v_Mms_Task_Tab || ' DROP PARTITION ' ||
                   v_PartPreFlag;
    v_SqlCursor := DBMS_SQL.OPEN_CURSOR;
    DBMS_SQL.PARSE(v_SqlCursor, v_SqlExec, DBMS_SQL.NATIVE);
    v_Rows := DBMS_SQL.EXECUTE(v_SqlCursor);
    DBMS_SQL.CLOSE_CURSOR(v_SqlCursor);
    dbms_output.put_line(v_PartPreFlag || ' dropped');
  END;
 
  BEGIN
    v_PartPreFlag := 'MMS_MT_USER_LOG' || '_' ||
                     TO_CHAR(SYSDATE - p_Range, 'yyyymmdd');
    dbms_output.put_line(v_PartPreFlag);
    v_SqlExec := 'ALTER TABLE ' || v_Mms_User_Tab || ' TRUNCATE PARTITION ' ||
                 v_PartPreFlag;
    dbms_output.put_line(v_SqlExec);
    v_SqlCursor := DBMS_SQL.OPEN_CURSOR;
    DBMS_SQL.PARSE(v_SqlCursor, v_SqlExec, DBMS_SQL.NATIVE);
    v_Rows := DBMS_SQL.EXECUTE(v_SqlCursor);
    DBMS_SQL.CLOSE_CURSOR(v_SqlCursor);
    dbms_output.put_line(v_PartPreFlag || ' truncated');
   
    v_SqlExec   := 'ALTER TABLE ' || v_Mms_User_Tab || ' DROP PARTITION ' ||
                   v_PartPreFlag;
    v_SqlCursor := DBMS_SQL.OPEN_CURSOR;
    DBMS_SQL.PARSE(v_SqlCursor, v_SqlExec, DBMS_SQL.NATIVE);
    v_Rows := DBMS_SQL.EXECUTE(v_SqlCursor);
    DBMS_SQL.CLOSE_CURSOR(v_SqlCursor);
    dbms_output.put_line(v_PartPreFlag || ' dropped');
  END;
 
  COMMIT;
 
  INSERT INTO BIP_LOG_STAT_EXEC_TAB
  VALUES
    (TO_CHAR(SYSDATE, 'yyyymmddhh24miss'),
     'BIP_MMS_PARTITION_PROC_DEL',
     'END');
  COMMIT;
EXCEPTION
  WHEN OTHERS THEN
    BEGIN
      ROLLBACK;
      dbms_output.put_line(TO_CHAR(SQLCODE));
      vErrInfo := SUBSTR(SQLERRM, 1, 200);
      dbms_output.put_line(TO_CHAR(vErrInfo));
      INSERT INTO BIP_LOG_STAT_EXEC_TAB
      VALUES
        (TO_CHAR(SYSDATE, 'yyyymmddhh24miss'),
         'BIP_MMS_PARTITION_PROC_ERROR',
         vErrInfo);
      COMMIT;
    END;
   
end bip_mms_partition_proc;
 

相關(guān)文章

  • Oracle硬解析和軟解析的區(qū)別分析

    Oracle硬解析和軟解析的區(qū)別分析

    我們都知道在Oracle中每條SQL語句在執(zhí)行之前都需要經(jīng)過解析,這里面又分為軟解析和硬解析。在Oracle中存在兩種類型的SQL語句,一類為 DDL語句(數(shù)據(jù)定義語言),就是每次執(zhí)行都需要進行硬解析。還有一類就是DML語句,他們會根據(jù)情況選擇要么進行硬解析,要么進行軟解析。
    2014-08-08
  • oracle+mybatis 使用動態(tài)Sql當插入字段不確定的情況下實現(xiàn)批量insert

    oracle+mybatis 使用動態(tài)Sql當插入字段不確定的情況下實現(xiàn)批量insert

    最近接了一個項目,其中項目需求,有一個非常糾結(jié)的問題,由于業(yè)務(wù)的關(guān)系,DB的數(shù)據(jù)表無法確定,在使用過程中字段可能會增加,這樣在insert時給我造成了很大的困擾。接下來,通過本篇文章給大家介紹oracle+mybatis 使用動態(tài)Sql當插入字段不確定的情況下實現(xiàn)批量insert
    2015-11-11
  • Oracle客戶端連接報錯ORA-12545問題的解決辦法

    Oracle客戶端連接報錯ORA-12545問題的解決辦法

    這篇文章主要給大家介紹了關(guān)于Oracle客戶端連接報錯ORA-12545問題的解決辦法,ora12545因目標主機或?qū)ο蟛淮嬖?連接失敗,文中通過圖文將解決的辦法介紹的非常詳細,需要的朋友可以參考下
    2024-03-03
  • ORACLE學(xué)習(xí)筆記-新建用戶及建表篇

    ORACLE學(xué)習(xí)筆記-新建用戶及建表篇

    Oracle系統(tǒng),即是以O(shè)racle關(guān)系數(shù)據(jù)庫為數(shù)據(jù)存儲和管理作為構(gòu)架基礎(chǔ),構(gòu)建出的數(shù)據(jù)庫管理系統(tǒng)。世界第一個支持SQL語言的商業(yè)數(shù)據(jù)庫,定位于高端工作站,以及作為服務(wù)器的小型計算機,Oracle公司的整個產(chǎn)品線包括數(shù)據(jù)庫服務(wù)器、企業(yè)商務(wù)應(yīng)用套件、應(yīng)用開發(fā)和決策支持工具
    2014-08-08
  • Oracle逗號分隔列轉(zhuǎn)行實現(xiàn)方法

    Oracle逗號分隔列轉(zhuǎn)行實現(xiàn)方法

    在做系統(tǒng)時,經(jīng)常會遇到在一個字段中,用逗號或其他符號分隔存儲多個信息,例如保存某個用戶的一對多權(quán)限時,在權(quán)限組這個字段中,就會逗號分隔保存多個權(quán)限編號。
    2010-12-12
  • oracle 聲明游標(不具備字段)規(guī)則應(yīng)用

    oracle 聲明游標(不具備字段)規(guī)則應(yīng)用

    在開發(fā)過程中可能會聲明一個含有某張表不具備字段的游標,來解決特殊問題,本文將詳細介紹這類問題,需要了解更多的朋友可以參考下
    2012-11-11
  • Windows系統(tǒng)下Oracle數(shù)據(jù)庫每天自動備份

    Windows系統(tǒng)下Oracle數(shù)據(jù)庫每天自動備份

    linux和unix下面使用shell可以很方便實現(xiàn),如果windows環(huán)境下可以結(jié)合計劃任務(wù)實現(xiàn)自動備份,下面通過本文給大家介紹實現(xiàn)方法,需要的朋友參考下吧
    2016-12-12
  • oracle表的簡單操作步驟

    oracle表的簡單操作步驟

    這篇文章主要介紹了oracle表的簡單操作步驟,需要的朋友可以參考下
    2017-06-06
  • Oracle數(shù)據(jù)庫數(shù)據(jù)丟失恢復(fù)的幾種方法總結(jié)

    Oracle數(shù)據(jù)庫數(shù)據(jù)丟失恢復(fù)的幾種方法總結(jié)

    相信大家無論是開發(fā)、測試還是運維過程中,都可能會因為誤操作、連錯數(shù)據(jù)庫、用錯用戶、語句條件有誤等原因,導(dǎo)致錯誤刪除、錯誤更新等問題。當你捶胸頓足或嚇得腿軟時,肯定希望有辦法來恢復(fù)這些數(shù)據(jù)。oracle就提供了一些強大的方法或機制,可以幫到有需要的你。
    2016-12-12
  • Oracle使用fy_recover_data恢復(fù)truncate刪除的數(shù)據(jù)

    Oracle使用fy_recover_data恢復(fù)truncate刪除的數(shù)據(jù)

    這篇文章主要介紹了Oracle使用fy_recover_data恢復(fù)truncate刪除的數(shù)據(jù),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07

最新評論