Я искал и нашел только эту проблему: Цикл по столбцам SQL В некоторых отношениях он похож, но не касается PL / SQL и Oracle Database, поэтому я задаю новый вопрос.
У меня есть стол с ок.2000 строк и 600 столбцов.В каждой строке есть несколько столбцов, содержащих только NULL.Я хочу написать процедуру PL / SQL для удаления этих столбцов из таблицы.Итак, я столкнулся с проблемой, я хотел перебрать столбцы в PL / SQL с помощью представления all_tab_columns.Вы можете видеть мой код ниже (мое имя таблицы - 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.
Я почти уверен, что есть кто-то, кто знает, как я могу справиться с этой проблемой (улучшив приведенный выше код, или, может быть, есть ли другой способ сделать это?> Заранее спасибо заваша помощь.