sql >> データベース >  >> RDS >> Oracle

Oracle SQL:テーブルからデータとパーティション名を選択し、パーティションを切り捨てます

    rowidについてのヒントに感謝します 、私は解決策を見つけました。 ROWIDがある場合は、その行が属するオブジェクトを判別できるはずです。

    4つのハッシュパーティションを持つ最小限の例:

    CREATE TABLE pt (i NUMBER)
     PARTITION BY HASH (i) (PARTITION pt1, PARTITION pt2, PARTITION pt3, PARTITION pt4);
    
    INSERT INTO pt SELECT ROWNUM FROM all_objects WHERE ROWNUM < 20;
    

    現在、各行にはROWIDがあります 。オブジェクト番号は、DBMS_ROWID.ROWID_OBJECTで確認できます。 。ディクショナリテーブルUSER_OBJECTS 次に、object_name(=テーブルの名前)とsubobject_name(=パーティションの名前)があります:

    SELECT i, 
           ROWID AS row_id, 
           dbms_rowid.rowid_object(ROWID) AS object_no,
           (SELECT subobject_name 
              FROM user_objects 
             WHERE object_id = dbms_rowid.rowid_object(pt.ROWID)) AS partition_name
      FROM pt
     ORDER BY 3;
    
    I   ROW_ID              OBJECT_NO PARTITION_NAME
    6   AAALrYAAEAAAATRAAA  47832   PT1
    11  AAALrYAAEAAAATRAAB  47832   PT1
    13  AAALrYAAEAAAATRAAC  47832   PT1
    9   AAALrZAAEAAAATZAAA  47833   PT2
    10  AAALrZAAEAAAATZAAB  47833   PT2
    12  AAALrZAAEAAAATZAAC  47833   PT2
    17  AAALrZAAEAAAATZAAD  47833   PT2
    19  AAALrZAAEAAAATZAAE  47833   PT2
    2   AAALraAAEAAAAThAAA  47834   PT3
    5   AAALraAAEAAAAThAAB  47834   PT3
    18  AAALraAAEAAAAThAAD  47834   PT3
    8   AAALraAAEAAAAThAAC  47834   PT3
    1   AAALrbAAEAAAATpAAA  47835   PT4
    3   AAALrbAAEAAAATpAAB  47835   PT4
    4   AAALrbAAEAAAATpAAC  47835   PT4
    7   AAALrbAAEAAAATpAAD  47835   PT4
    


    1. Oracle DB に接続できず、java.sql.SQLException としてエラーが発生します:Io 例外:ネットワーク アダプタが接続を確立できませんでした

    2. DATEまたはDATETIMEのデフォルト値を設定する際のMySQLのエラー

    3. MySQLデフォルト値が指定されていない場合、タイムスタンプのデフォルト値が無効です。

    4. mysqlへの接続中にエラー接続ECONNREFUSED127.0.0.1:3306を取得する