7

テーブルがあり、その上にパーティションがあります。

SUBSCRIBER_01 から始まる 16 個のハッシュ パーティションがあります .. など

テーブル名: サブスクライバー

パーティション列: CUSTOMER_ID (VARCHAR2 10)

データベース: 11g

レコードのパーティションを見つけるにはどうすればよいですか?

Customer_ID=933587 のように

4

5 に答える 5

19

行の行 ID を選択すると、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
于 2012-12-01T14:47:15.747 に答える
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)

ここではハッシュパーティショニングを使用しています。

于 2016-03-10T09:57:07.980 に答える
0

cust_id = 123 ... が割り当てられているパーティション名しか見つからないと思います。

SELECT partition_name, tablespace_name
 FROM user_tab_partitions
WHERE table_name = your_table;
于 2012-12-06T15:35:32.780 に答える
-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;
于 2012-12-01T13:44:46.860 に答える