0
A
回答
3
如果你只是想發現是始終空,這個查詢創建可以運行查詢的列的列數,那些具有價值列0是空的。
select 'select '
|| listagg('count(' || column_name || ') as ' || column_name, ', ')
within group (order by column_id)
|| ' from my_table;'
from user_tab_columns
where table_name = 'MY_TABLE'
這裏有一個SQL Fiddle證明。
如果你想名稱的列你必須使用PL/SQL。這個函數會返回列名的逗號分隔的列表,當然你可以返回一個用戶定義類型等
create or replace function null_cols(P_TableName varchar2) return varchar2 is
l_cols varchar2(32767);
l_result number;
begin
for i in (select column_name
from user_tab_columns
where table_name = upper(P_TableName)
) loop
execute immediate 'select count(' || i.column_name || ')
from ' || P_TableName
into l_result;
if l_result = 0 then
l_cols := l_cols || i.column_name || ', ';
end if;
end loop;
return l_cols;
end;
/
這裏有一個擴展到同一SQL Fiddle與功能的添加。
我必須補充一點,如果您接受用戶輸入以使用該功能,則應使用dbms_assert
包來幫助避免SQL注入。
0
您可以使用下面的查詢來識別相同的,請確保您收集統計信息爲獲得正確的結果
select table_name, column_name
from user_tab_cols
where table_name = 'MY_TABLE'
and NUM_DISTINCT = 0
and NUM_NULLS > 0
更新1: - 如果定期收集統計信息(不是100點%的統計),您可以使用Ben的答案並對其進行優化。下面將減少其需要被檢查
for i in (select column_name
from user_tab_columns
where table_name = upper(P_TableName)
and num_distinct=0 and num_nulls > 0
) loop
相關問題
- 1. 只有有值時纔可以獲得列名?
- 2. 獲得價值有相同的列名
- 3. 是否有可能只獲得本地和別名隊列的隊列名稱?
- 4. 如何獲得沒有命名空間的只有類名
- 5. Oracle:查找只有空值的列
- 6. Rails,獲得值的列名稱
- 7. 實體 - 如何獲得只有一列
- 8. 如何獲得只有一列與MySQL的價值?
- 9. 打印具有空值的列名oracle
- 10. 我如何獲得列名和/或值?
- 11. 獲得具有相同的列值
- 12. MySQL的:只得到非空列
- 13. 如何獲得SQL Server 2008中列值爲NULL的列名稱
- 14. 獲取DataTable中的字段值時,列名中有空格
- 15. 無法獲取MSI表中的整個列!只獲得列的第一個值
- 16. 獲得基於列的值
- 17. 獲得列的最新值
- 18. 使用RestSharp反序列化列表時獲得空值
- 19. SQL Server:是列值爲空從另一個表中獲得列
- 20. 如何獲得在列中具有特定值的表名稱列表?
- 21. 從空表中獲取列名列表
- 22. CSV閱讀器沒有獲得列值
- 23. 我的散列表只是將空值
- 24. 在MySQL表中查找所有那些只有空值的列
- 25. 沒能獲得DISTINCT列值:
- 26. JsInterop - 獲得值在陣列
- 27. 獲得價值陣列
- 28. DieHarder,獲得p值列
- 29. 獲得值從雙列表
- 30. Mysql只獲得最新的記錄,其中列設置,並從下一行獲得空列
添加了一條建議我將字符串連接到的行更改爲「dbms_output.put_line」太重了。儘管如此,它的工作。謝謝 – gilibi 2012-07-15 11:25:04
@gilibi,不管你爲什麼工作,字符串連接只是你如何顯示結果的例子! 'dbms_output.put_line'被限制爲255個字符,因此您必須手動執行某些操作。 – Ben 2012-07-15 11:26:29