激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Oracle - oracle存儲過程創建表分區實例

oracle存儲過程創建表分區實例

2019-12-02 15:51oracle教程網 Oracle

二種oracle存儲過程創建表分區實例

用存儲過程創建數據表:
創建時注意必須添加authid current_user,如果創建的表已存在,存儲過程繼續執行,但如不不加此關鍵語句,存儲過程將出現異常,
這個語句相當于賦權限。
例1
創建語句如下:

復制代碼代碼如下:

create or replace
procedure sp_create_mnl(i_id varchar2) authid current_user  as 
  /********************************* 
名稱:sp_create_mnl 
功能描述:創建模擬量歷史數據存儲表 

修訂記錄: 
版本號   編輯時間  編輯人  修改描述 
1.0.0    2012-9-20 wylaok  1.創建此存儲過程 
1.0.1    2012-9-21 wylaok  2.修改表名稱及變量名稱,增加必要注釋 

入參出參描述: 
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  --如果沒有這個表 則去創建 
         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; 


調用此存儲過程:

復制代碼代碼如下:

begin
  createmnl('mnl_14');
  end;


例2

復制代碼代碼如下:

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); --分區名標識 
  v_SqlCursor       NUMBER; --游標 
  v_SqlExec         VARCHAR2(2000); --執行語句 
  v_PartPreDate     VARCHAR2(20); --分區日期 
  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'; 
  -- 讀取配置參數 
  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; 
  --記錄存儲過程添加分區 
  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 添加分區 
    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 添加分區 
    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 添加分區 
    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;
 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 性爱视频在线免费 | av在线日韩| 三级国产网站 | 欧美成人国产va精品日本一级 | 久久最新视频 | 亚洲91精品 | 久久精品视频16 | 免看黄大片aa | 激情视频在线播放 | 蜜桃一本色道久久综合亚洲精品冫 | 成人毛片免费播放 | 成人一级毛片 | 久久综合色区 | 一级α片免费看 | 欧美成人午夜 | 日本视频免费看 | 无遮挡一级毛片视频 | 中国免费一级毛片 | 中午字幕无线码一区2020 | 国产一区二区三区网站 | 久久亚洲精品久久国产一区二区 | 日韩999| 一本在线高清码电影 | 高清国产在线 | 日本中文高清 | 国产精品高潮视频 | 精品成人av一区二区在线播放 | 日韩字幕在线观看 | 操碰网 | 免费观看视频91 | 高清国产免费 | 国产美女爽到喷白浆的 | 国产精品久久久久久久娇妻 | 欧美特黄一级视频 | 精品一二三区视频 | 亚洲一级片在线观看 | 99在线精品视频免费观看20 | av在线不卡免费 | 一级成人欧美一区在线观看 | 久草在线视频网 | 成人在线观看一区二区 |