的模式的所有表我將獲得許多模式的所有表,其中每個表都包含它所包含的行數。我想是這樣的:Oracle請求選擇行數爲
SELECT OWNER, TABLE_NAME, COUNT(TABLE_NAME)
FROM DBA_USERS
WHERE OWNER IN ('TOTO', 'TITI');
我必須做與請求「/ SYSDBA身份」,這就是爲什麼我嘗試使用DBA_USERS表。 你知道我爲什麼可以這樣做嗎?
感謝您的幫助,
史蒂夫
的模式的所有表我將獲得許多模式的所有表,其中每個表都包含它所包含的行數。我想是這樣的:Oracle請求選擇行數爲
SELECT OWNER, TABLE_NAME, COUNT(TABLE_NAME)
FROM DBA_USERS
WHERE OWNER IN ('TOTO', 'TITI');
我必須做與請求「/ SYSDBA身份」,這就是爲什麼我嘗試使用DBA_USERS表。 你知道我爲什麼可以這樣做嗎?
感謝您的幫助,
史蒂夫
使用
SELECT OWNER, TABLE_NAME, NUM_ROWS
FROM DBA_TABLES
WHERE OWNER IN ('TOTO', 'TITI');
它不是由SYS用戶需要,所有你需要的是SELECT ANY DICTIONARY
特權。
注意:列NUM_ROWS不一定顯示確切的行數,它只是基於收集的統計數字的數字。爲了獲得每個表的確切編號,您必須編寫動態SQL語句。
UPDATE:
對於確切的數,您可以創建一個功能:
CREATE FUNCTION COUNT_ROWS(TABLE_NAME IN VARCHAR2) RETURN NUMBER IS
res NUMBER;
BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM '||TABLE_NAME INTO res;
RETURN res;
END COUNT_ROWS;
/
SELECT OWNER, TABLE_NAME, NUM_ROWS, Count_rows(OWNER||'.'||TABLE_NAME) as num_rows_exact
FROM DBA_TABLES
WHERE OWNER IN ('TOTO', 'TITI');
要知道,如果你的架構包含了許多數據的多個表,此查詢可能需要一些時間來執行。
的確,這是我不想做的,使用num_rows。你知道如何動態地做到這一點嗎? – user2269756
這個問題是獲得_a_模式的所有表;這一個是獲得_many_ scemas的所有表。我不知道甲骨文,所以我不能分辨這個問題的答案是否適用於這個問題。 –
@WayneConrad - 他們做了一些小小的調整;在Rob的回答中,只需使用'dba_tables'而不是'user_tables',並將'owner'添加到count中的表名中。 –