DECLARE
v_owner varchar2(40);
v_table_name varchar2(40);
cursor get_tables is
select distinct table_name
, user
from user_tables
where lower(user) = 'schema_name'
;
BEGIN
OPEN get_tables;
LOOP
FETCH get_tables
INTO v_table_name
, v_owner
;
EXIT WHEN get_tables%NOTFOUND;
EXECUTE IMMEDIATE
'INSERT
INTO STATS_TABLE
( TABLE_NAME
, SCHEMA_NAME
, RECORD_COUNT
, CREATED
)
SELECT '''
|| v_table_name
|| ''' , ''' || v_owner
|| ''' , COUNT(*)
, TO_DATE(SYSDATE,''DD-MON-YY'')
FROM ' || v_table_name
;
END LOOP;
CLOSE get_tables;
END;
我使用它来获取架构中所有表的行数。我从stackoverflow得到了这个查询。
我把它作为一个成功编译的程序运行但是我无法查看结果y是这样吗?
我是pl / sql的新手,任何人都可以解释在执行立即查询后select语句做了什么我无法理解背后的逻辑。
答案 0 :(得分:0)
行计数将插入表名STATS_TABLE
。你需要运行一个
select *
from stats_table
运行程序后
答案 1 :(得分:0)
嗯,user_tables没有用户列,因此该查询无效。始终单独测试查询 - 您可能需要all_tables
或dba_tables
。另外,您认为在该查询中需要DISTINCT
吗?
使用隐式光标而不是显式的光标 - 更少的代码,更少的编码错误,更快。
不要将日期存储为字符类型 - 您只需插入sysdate
,而不是将其表示为字符串。
不要在变量名前加“v_” - 只需用过程或块名称命名它们。
Execute Immediate
构造一个执行insert into
stats_table的SQL语句(为什么名称中有“table”这个词?这当然是多余的?)
查询将构建为:
INSERT INTO STATS_TABLE
( TABLE_NAME
, SCHEMA_NAME
, RECORD_COUNT
, CREATED
)
SELECT 'MY_TABLE_NAME' , 'MY_USERNAME' , COUNT(*) , TO_DATE(SYSDATE,'DD-MON-YY')
FROM MY_TABLE_NAME;
答案 2 :(得分:0)
此过程成功运行
DECLARE
v_owner varchar2(40);
v_table_name varchar2(40);
cursor get_tables is
select distinct table_name, user
from user_tables
where lower(user) = 'coreown' ;
BEGIN
OPEN get_tables;
LOOP
FETCH get_tables
INTO v_table_name, v_owner;
EXIT WHEN get_tables%NOTFOUND;
EXECUTE IMMEDIATE 'INSERT
INTO STATS_TABLE
( TABLE_NAME
, SCHEMA_NAME
, RECORD_COUNT
, CREATED
)
SELECT ''' || v_table_name ||
''' , ''' || v_owner || ''' , COUNT(*)
, TO_DATE(SYSDATE,''DD-MON-YY'')
FROM ' || v_table_name;
END LOOP;
CLOSE get_tables;
END;
/
我试着结束了。
执行USE COMMIT
后。保存更改的是DB。
然后再次检查。
答案 3 :(得分:0)
尝试一下:
select TABLE_NAME, NUM_ROWS from dba_tables where owner = 'xxxxx'
答案 4 :(得分:0)
您可以通过以下方式简单地获取表的行数:
select owner, table_name, nvl(num_rows,-1)
from all_tables
order by nvl(num_rows,-1) desc
https://livesql.oracle.com/apex/livesql/file/content_EPJLBHYMPOPAGL9PQAV7XH14Q.html