我已经通过搜索,发现只有这个问题: Loop through columns SQL 它在某些方面类似,但不涉及PL/SQL和Oracle数据库,因此我要求新的问题。如何通过PL/SQL循环遍历列
我有一张桌子与约。 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;
具有字符类型的列名和null_row_count总是等于0
我很确定,这里有人知道我该如何处理这个问题(通过改进上面的代码,或者有没有其他方法可以做这样的事情?> 在此先感谢您的帮助。