中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle怎么查詢Interval partition分區表內數據

發布時間:2021-08-30 18:55:15 來源:億速云 閱讀:202 作者:chen 欄目:關系型數據庫

本篇內容介紹了“Oracle怎么查詢Interval partition分區表內數據”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

1.查看分區信息

select table_name,partition_name,high_value,partition_position,num_rows from dba_tab_partitions where table_owner='CAMS_CORE' and table_name='BP_VOUCHER_HISTORY';

Oracle怎么查詢Interval partition分區表內數據

注:dba_tab_partitions | all_tab_partitions | user_tab_partitions表都可以

2.查看分區內數據(以SYS_P82分區為例)

(1)如果知道分區的名字,可以直接查詢對應的分區名

SYS@cams> select count(*) from cams_core.bp_voucher_history partition(SYS_P82);

  COUNT(*)

----------

   2844459

(2)如果不知道分區的名字,但是知道分區主鍵的字段值范圍,可以基于分區范圍進行查詢

SYS@cams> select count(*) from cams_core.bp_voucher_history partition where ac_dte>=to_date('2017-01-01','yyyy-mm-dd') and ac_dte<to_date('2017-02-01','yyyy-mm-dd');

  COUNT(*)

----------

   2844459

(3)如果不知道分區的名字,也不知道分區主鍵的字段值范圍,可以使用PARTITION FOR子句進行查詢,比如現在只知道2017-01-15是這個分區的數據

SYS@cams> select count(*) from cams_core.bp_voucher_history partition for(to_date('2017-01-15','yyyy-mm-dd'));

  COUNT(*)

----------

   2844459

  1. 注:PARTITION FOR子句可以用于指定分區,而不使用分區的名字。

3.根據分區內的分區字段值,查詢Interval Partition分區的名字

因為Oracle并沒有提供直接的方法用于指定某個日期屬于哪個分區,所以這里要借助于dba_tab_partitions的high_value。但是這里又有一個問題,high_value是Long類型的,不能使用to_date或者to_char函數直接進行轉化。

所以,要解決根據分區字段值查詢分區的問題,本文的解決方案是把Oracle數據庫的Long類型轉化為varchar2類型或者date類型,然后進行比對,查找出分區的名字。

set serveroutput on;
--/
declare
  my_var date;
begin
  for x in (select * from dba_tab_partitions where table_owner='CAMS_CORE' and table_name='BP_VOUCHER_HISTORY') loop
  execute immediate 'select '|| x.high_value || 'from dual' into my_var;
  if (my_var = to_date('2017-02-01','yyyy-mm-dd')) then
    dbms_output.put_line(x.partition_name);
  end if;
  end loop;
end;
/

Oracle怎么查詢Interval partition分區表內數據

同理,對于使用數字進行自動分區的情況,也可以通過類似的方法進行處理。

從MOS上找到的用于將high_value轉化為varvhar2類型的方法,這里進行分享(已經對部分參數進行修改):

select subname,
       TO_CHAR(y1*100+y2, '9999') || '/' ||
       TO_CHAR(m,  'FM09')        || '/' ||
       TO_CHAR(d,  'FM09')        || ' ' ||
       TO_CHAR(hh, 'FM09')        || ':' ||
       TO_CHAR(mi, 'FM09')        || ':' ||
       TO_CHAR(ss, 'FM09')
from (
SELECT
  o.subname, tp.part#,
  TO_NUMBER(SUBSTR(RAWTOHEX(CAST(bhiboundval as raw(8))),  3, 2),
'XX')-100 y1,
  TO_NUMBER(SUBSTR(RAWTOHEX(CAST(bhiboundval as raw(8))),  5, 2),
'XX')-100 y2,
  TO_NUMBER(SUBSTR(RAWTOHEX(CAST(bhiboundval as raw(8))),  7, 2),
'XX')     m,
  TO_NUMBER(SUBSTR(RAWTOHEX(CAST(bhiboundval as raw(8))),  9, 2),
'XX')     d,
  TO_NUMBER(SUBSTR(RAWTOHEX(CAST(bhiboundval as raw(8))), 11, 2),
'XX')-1   hh,
  TO_NUMBER(SUBSTR(RAWTOHEX(CAST(bhiboundval as raw(8))), 13, 2),
'XX')-1   mi,
  TO_NUMBER(SUBSTR(RAWTOHEX(CAST(bhiboundval as raw(8))), 15, 2),
'XX')-1   ss
  from sys.tabpart$ tp, sys.obj$ o, sys.user$ u
  where tp.obj# = o.obj# and o.owner# = u.user#
   and o.name = 'BP_VOUCHER_HISTORY' and u.name = 'CAMS_CORE')
order by part#;

Oracle怎么查詢Interval partition分區表內數據

with xml as (
select dbms_xmlgen.getxmltype('select table_name, partition_name, high_value from dba_tab_partitions where table_name = ''BP_VOUCHER_HISTORY'' and table_owner=''CAMS_CORE''') as x
from dual
)
select extractValue(rws.object_value, '/ROW/TABLE_NAME') table_name,
extractValue(rws.object_value, '/ROW/PARTITION_NAME') partition,
extractValue(rws.object_value, '/ROW/HIGH_VALUE') high_value
from xml x,
table(xmlsequence(extract(x.x, '/ROWSET/ROW'))) rws ORDER BY extractValue(rws.object_value, '/ROW/TABLE_NAME');

Oracle怎么查詢Interval partition分區表內數據

“Oracle怎么查詢Interval partition分區表內數據”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

县级市| 阜阳市| 阜宁县| 梨树县| 深圳市| 炎陵县| 永胜县| 荔浦县| 新丰县| 新昌县| 卓资县| 岳西县| 新闻| 洛南县| 潞城市| 阿拉尔市| 都匀市| 韶山市| 中西区| 翁牛特旗| 保靖县| 葫芦岛市| 富川| 嘉禾县| 阿坝| 阿城市| 方城县| 镇原县| 丘北县| 高邑县| 密山市| 福鼎市| 永定县| 邓州市| 伊春市| 津市市| 汉沽区| 定结县| 莒南县| 济南市| 长阳|