获取oracle所有表的元数据的命令?

获取oracle所有表的元数据的命令?,oracle,oracle11g,oracle-sqldeveloper,Oracle,Oracle11g,Oracle Sqldeveloper,是否有人可以使用SQL Developer命令帮助我获取有关表中的行数、每个表中的列数以及特定架构中每个表的最新更新日期的信息?要获取架构中每个表的行数以及最新SCN的日期测试: CREATE TYPE TEST.stringlist IS TABLE OF VARCHAR2(4000); / VARIABLE cur REFCURSOR; DECLARE t_sql TEST.stringlist; v_sql CLOB; v_scn NUMBER; v_owner VAR

是否有人可以使用SQL Developer命令帮助我获取有关表中的行数、每个表中的列数以及特定架构中每个表的最新更新日期的信息?

要获取架构中每个表的行数以及最新SCN的日期
测试

CREATE TYPE TEST.stringlist IS TABLE OF VARCHAR2(4000);
/

VARIABLE cur REFCURSOR;

DECLARE
  t_sql TEST.stringlist;
  v_sql CLOB;
  v_scn NUMBER;
  v_owner VARCHAR2(30) := 'TEST';
BEGIN
  SELECT MIN(SCN)
  INTO   v_scn
  FROM   sys.smon_scn_time;

  SELECT 'SELECT ''' || TABLE_NAME || ''' AS table_name, '
                 || 'TRUNC( MAX( CASE WHEN ORA_ROWSCN >= ' || v_scn || ' THEN SCN_TO_TIMESTAMP( ORA_ROWSCN ) END ) ) AS last_update_day, '
                 || 'COUNT(*) AS num_rows '
         || 'FROM ' || v_owner || '.' || table_name
  BULK COLLECT INTO t_sql
  FROM   ALL_TABLES
  WHERE  OWNER = v_owner;

  v_sql := t_sql(1);
  FOR i IN 2 .. t_sql.COUNT LOOP
    v_sql := v_sql || ' UNION ALL ' || t_sql(i);
  END LOOP;

  OPEN :cur FOR v_sql;  
END;
/

PRINT cur;
SELECT TABLE_NAME,
       COUNT(*) AS num_columns
FROM   ALL_TAB_COLUMNS
WHERE  OWNER = 'TEST'
GROUP BY TABLE_NAME;
要获取架构的每个表的列数
TEST

CREATE TYPE TEST.stringlist IS TABLE OF VARCHAR2(4000);
/

VARIABLE cur REFCURSOR;

DECLARE
  t_sql TEST.stringlist;
  v_sql CLOB;
  v_scn NUMBER;
  v_owner VARCHAR2(30) := 'TEST';
BEGIN
  SELECT MIN(SCN)
  INTO   v_scn
  FROM   sys.smon_scn_time;

  SELECT 'SELECT ''' || TABLE_NAME || ''' AS table_name, '
                 || 'TRUNC( MAX( CASE WHEN ORA_ROWSCN >= ' || v_scn || ' THEN SCN_TO_TIMESTAMP( ORA_ROWSCN ) END ) ) AS last_update_day, '
                 || 'COUNT(*) AS num_rows '
         || 'FROM ' || v_owner || '.' || table_name
  BULK COLLECT INTO t_sql
  FROM   ALL_TABLES
  WHERE  OWNER = v_owner;

  v_sql := t_sql(1);
  FOR i IN 2 .. t_sql.COUNT LOOP
    v_sql := v_sql || ' UNION ALL ' || t_sql(i);
  END LOOP;

  OPEN :cur FOR v_sql;  
END;
/

PRINT cur;
SELECT TABLE_NAME,
       COUNT(*) AS num_columns
FROM   ALL_TAB_COLUMNS
WHERE  OWNER = 'TEST'
GROUP BY TABLE_NAME;

要获取模式测试的每个表的行数和最新SCN的日期,请执行以下操作:

CREATE TYPE TEST.stringlist IS TABLE OF VARCHAR2(4000);
/

VARIABLE cur REFCURSOR;

DECLARE
  t_sql TEST.stringlist;
  v_sql CLOB;
  v_scn NUMBER;
  v_owner VARCHAR2(30) := 'TEST';
BEGIN
  SELECT MIN(SCN)
  INTO   v_scn
  FROM   sys.smon_scn_time;

  SELECT 'SELECT ''' || TABLE_NAME || ''' AS table_name, '
                 || 'TRUNC( MAX( CASE WHEN ORA_ROWSCN >= ' || v_scn || ' THEN SCN_TO_TIMESTAMP( ORA_ROWSCN ) END ) ) AS last_update_day, '
                 || 'COUNT(*) AS num_rows '
         || 'FROM ' || v_owner || '.' || table_name
  BULK COLLECT INTO t_sql
  FROM   ALL_TABLES
  WHERE  OWNER = v_owner;

  v_sql := t_sql(1);
  FOR i IN 2 .. t_sql.COUNT LOOP
    v_sql := v_sql || ' UNION ALL ' || t_sql(i);
  END LOOP;

  OPEN :cur FOR v_sql;  
END;
/

PRINT cur;
SELECT TABLE_NAME,
       COUNT(*) AS num_columns
FROM   ALL_TAB_COLUMNS
WHERE  OWNER = 'TEST'
GROUP BY TABLE_NAME;
要获取架构的每个表的列数
TEST

CREATE TYPE TEST.stringlist IS TABLE OF VARCHAR2(4000);
/

VARIABLE cur REFCURSOR;

DECLARE
  t_sql TEST.stringlist;
  v_sql CLOB;
  v_scn NUMBER;
  v_owner VARCHAR2(30) := 'TEST';
BEGIN
  SELECT MIN(SCN)
  INTO   v_scn
  FROM   sys.smon_scn_time;

  SELECT 'SELECT ''' || TABLE_NAME || ''' AS table_name, '
                 || 'TRUNC( MAX( CASE WHEN ORA_ROWSCN >= ' || v_scn || ' THEN SCN_TO_TIMESTAMP( ORA_ROWSCN ) END ) ) AS last_update_day, '
                 || 'COUNT(*) AS num_rows '
         || 'FROM ' || v_owner || '.' || table_name
  BULK COLLECT INTO t_sql
  FROM   ALL_TABLES
  WHERE  OWNER = v_owner;

  v_sql := t_sql(1);
  FOR i IN 2 .. t_sql.COUNT LOOP
    v_sql := v_sql || ' UNION ALL ' || t_sql(i);
  END LOOP;

  OPEN :cur FOR v_sql;  
END;
/

PRINT cur;
SELECT TABLE_NAME,
       COUNT(*) AS num_columns
FROM   ALL_TAB_COLUMNS
WHERE  OWNER = 'TEST'
GROUP BY TABLE_NAME;