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. Oracle:查找只有空值的列
- 3. Rails,獲得值的列名稱
- 4. 實體 - 如何獲得只有一列
- 5. 打印具有空值的列名oracle
- 6. 我如何獲得列名和/或值?
- 7. 獲取DataTable中的字段值時,列名中有空格
- 8. 獲得基於列的值
- 9. 使用RestSharp反序列化列表時獲得空值
- 10. 從空表中獲取列名列表
- 11. CSV閱讀器沒有獲得列值
- 12. 我的散列表只是將空值
- 13. JsInterop - 獲得值在陣列
- 14. 獲得價值陣列
- 15. 只有獲得具有特定值
- 16. 獲得一個空列的名稱與MySQL
- 17. 如何獲得集合的空列表?
- 18. 如何獲得非空的第一列
- 19. 迭代DataGridView只獲得前兩列的值
- 20. 查詢只在一組列獲得不同的值
- 21. 我的程序只獲得陣列的第一個值,我需要所有的
- 22. 如何通過列名稱獲取具有值的列?
- 23. NSUserDefaults - 爲所有值獲得空值
- 24. 是否有可能獲得已定義的命名空間的列表
- 25. 熊貓創建只有列名的空DataFrame
- 26. SSRS - 如何按列名獲取列值
- 27. 從列值中獲取列名
- 28. django值列表只獲取值一次
- 29. 從SQL Server多值字段獲得列名和值
- 30. Struts - 如何獲得選擇列表的值,如果它爲空?
添加了一條建議我將字符串連接到的行更改爲「dbms_output.put_line」太重了。儘管如此,它的工作。謝謝 – gilibi 2012-07-15 11:25:04
@gilibi,不管你爲什麼工作,字符串連接只是你如何顯示結果的例子! 'dbms_output.put_line'被限制爲255個字符,因此您必須手動執行某些操作。 – Ben 2012-07-15 11:26:29