2012-12-01 18 views
5

मेरे पास एक टेबल है और इसमें एक विभाजन है। ग्राहकरिकॉर्ड ऑरैकल के विभाजन को कैसे ढूंढें

विभाजन स्तंभ::

16 हैश विभाजन जो SUBSCRIBER_01 से शुरू कर रहा है .. आदि

तालिका नाम हैं CUSTOMER_ID (VARCHAR2 10)

डेटाबेस: 11g

कैसे कर सकते हैं मुझे रिकॉर्ड का विभाजन मिलता है?

तरह CUSTOMER_ID = 933587

उत्तर

-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; 
+0

सच धीमी गति से ..... –

13

पंक्ति के लिए 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 
0

मुझे लगता है कि आप केवल विभाजन नाम जहां cust_id = 123 ... आवंटित पा सकते हैं:

SELECT partition_name, tablespace_name 
FROM user_tab_partitions 
WHERE table_name = your_table; 
0

इस कोशिश,

select distinct SUBOBJECT_NAME from user_objects where data_object_id = (SELECT distinct dbms_rowid.rowid_object(ROWID) data_object_id FROM <your table name> WHERE <your partition key> = <partition key value>and rownum=1) 

मैं हैश विभाजन का उपयोग कर रहा हूँ।

0

आप इस स्क्रिप्ट का उपयोग कर सकते हैं:

SELECT L.*, O.SUBOBJECT_NAME 
FROM 
    (
    SELECT DBMS_ROWID.ROWID_OBJECT(ROWID) DATA_OBJECT_ID, L.* 
    FROM YOUR_TABLE L 
    --WHERE L.ID = 123 
) L 
    JOIN 
    (
    SELECT SUBOBJECT_NAME, DATA_OBJECT_ID 
    FROM USER_OBJECTS 
) O ON O.DATA_OBJECT_ID = L.DATA_OBJECT_ID 
; 
संबंधित मुद्दे