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

テーブル名と対応するカウントを一覧表示するoracleプロシージャ

    ここで正確な要件が何であるかはわかりませんが、次のアプローチを使用して、各テーブルからレコード数をフェッチできます。

    SQL> -- This is sample data
    SQL> WITH SAMPLE_DATA(TNAME) AS
      2  (SELECT 'CUSTOMERS' FROM DUAL UNION ALL
      3  SELECT 'INTERVAL_TAB' FROM DUAL)
      4  -- Your query starts from here
      5  SELECT TABLE_NAME,
      6         TO_NUMBER(
      7         EXTRACTVALUE( XMLTYPE(
      8         DBMS_XMLGEN.GETXML('select count(*) c from ' || U.TABLE_NAME)
      9         ), '/ROWSET/ROW/C')) COUNT
     10    FROM USER_TABLES U JOIN SAMPLE_DATA S ON S.TNAME = U.TABLE_NAME;
    
    TABLE_NAME           COUNT
    --------------- ----------
    CUSTOMERS                1
    INTERVAL_TAB             0
    
    SQL>
    

    -更新

    次のようにビューを生成できます:

    -このセクションを更新

    CREATE OR REPLACE VIEW V_CHECK_RECORDS_AUS AS
    SELECT TABLE_NAME,
           TO_NUMBER(
               EXTRACTVALUE( XMLTYPE(
                       DBMS_XMLGEN.GETXML('select count(*) c from ' 
                          || U.TABLE_NAME || ' WHERE oe_name=''BUL''')
                   ), '/ROWSET/ROW/C')) NUM_ROWS
      FROM USER_TAB_COLUMNS U JOIN GD_TABLE_ORDER S ON S.TABLE_NAME_AUS = U.TABLE_NAME 
     WHERE U.COLUMN_NAME = 'OE_NAME';
    

    同様に、他のビューを生成できます。

    -さらなる更新

    CREATE OR REPLACE VIEW V_CHECK_RECORDS_AUS AS
    SELECT TABLE_NAME,
           CASE WHEN U.COLUMN_NAME IS NOT NULL THEN TO_NUMBER(
               EXTRACTVALUE( XMLTYPE(
                       DBMS_XMLGEN.GETXML('select count(*) c from ' 
                          || U.TABLE_NAME || ' WHERE ' || U.COLUMN_NAME || '=''BUL''')
                   ), '/ROWSET/ROW/C')) 
             ELSE 0 END NUM_ROWS
      FROM GD_TABLE_ORDER S LEFT JOIN USER_TAB_COLUMNS U 
      ON S.TABLE_NAME_AUS = U.TABLE_NAME AND U.COLUMN_NAME = 'OE_NAME';
    



    1. Puppetを使用したデータベース自動化:MySQLとMariaDBGaleraクラスターのデプロイ

    2. データセット間の類似率を計算する効果的な方法

    3. 無制限の動的フィールドに対するMySQLデータベース設計の批評

    4. SQLスクリプトの実行中にprintステートメントをエコーする方法