Jac*_*ack 6 database oracle plsql oracle11g database-partitioning
我有一张桌子,上面有一个分区.
从SUBSCRIBER_01等开始有16个散列分区
表名:SUBSCRIBER
分区列:CUSTOMER_ID(VARCHAR2 10)
数据库:11g
如何找到记录的分区?
像Customer_ID = 933587
Dav*_*dge 15
选择行的rowid,DBMS_RowID.RowID_Object()过程将提取数据对象id.
http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_rowid.htm#i997153
在数据字典中查找该数据对象id并读取subobject_name.
例如:
   SELECT dbms_rowid.rowid_object(ROWID) data_object_id
   FROM INVOICE
   WHERE INVOICE_ID = 2268041139:
   -- data_object_id = 546512
   select * from user_objects where data_object_id = 546512;
   -- SUBOBJECT_NAME = 'PART_P2099_P00'     
   -- OBJECT_TYPE = TABLE PARTITION
   -- OBJECT_ID = 464826
   -- DATA_OBJECT_ID = 546512
Jac*_*ack -1
我找到了答案。
 DECLARE
       pi_partition varchar2(50);
       v_sql        varchar2(250);
       i            number;
       sy          number;
    BEGIN
       FOR i IN 1..16
       LOOP
          IF i < 10 THEN
            pi_partition:= 'SUBSCRIBER_0'||i;
          ELSE
            pi_partition:= 'SUBSCRIBER_'||i;
          END IF;
          sy:=0;
          v_sql:= 'select count(*) into :say from subscriber partition('||pi_partition||') where customer_ID='||''''||'933564'||'''';
          --dbms_output.put_line(pi_partition);
          EXECUTE IMMEDIATE v_sql INTO sa;
          IF sy > 0 THEN
            DBMS_OUTPUT.PUT_LINE('Result: ' || sy||pi_partition);
            EXIT;
          END IF;
       END LOOP;
    END;
| 归档时间: | 
 | 
| 查看次数: | 26935 次 | 
| 最近记录: |