【发布时间】:2011-10-19 17:06:08
【问题描述】:
我搜索了一下,发现只有这个问题: Loop through columns SQL 它在某些方面很相似,但不涉及 PL/SQL 和 Oracle 数据库,因此我在问新问题。
我有一张桌子。 2000 行和 600 列。有一些列在每一行中只包含 NULL。我想要做的是编写一个 PL/SQL 过程来从表中删除这些列。 所以我遇到了一个问题,我想在 all_tab_columns 视图的帮助下遍历 PL/SQL 中的列。你可以在下面看到我的代码(我的表名是 PreparedDocumentFeaturesValues):
PROCEDURE dropNullColumns AS
l_query VARCHAR2(10000);
all_row_count NUMBER;
null_row_count NUMBER;
BEGIN
SELECT count(*)
INTO all_row_count
FROM PreparedDocumentFeaturesValues;
FOR columnItem IN (SELECT column_name
FROM all_tab_columns
WHERE TABLE_NAME = UPPER('PreparedDocumentFeaturesValues'))
LOOP
SELECT count(*)
INTO null_row_count
FROM PreparedDocumentFeaturesValues
WHERE columnItem.column_name IS NULL;
IF all_row_count=null_row_count THEN
l_query := 'ALTER TABLE PreparedDocumentFeaturesValues DROP COLUMN ' || columnItem.column_name;
EXECUTE IMMEDIATE l_query;
END IF;
END LOOP;
END;
问题在于那句话:
SELECT count(*)
INTO null_row_count
FROM PreparedDocumentFeaturesValues
WHERE columnItem.column_name IS NULL;
具有作为 column_name 的字符类型,并且 null_row_count 始终等于 0。
我很确定,有人知道我该如何解决这个问题(通过改进上面的代码,或者有没有其他方法可以做到这一点?> 提前感谢您的帮助。
【问题讨论】: