Я пытаюсь подсчитать количество нулевых значений для каждого столбца для данной таблицы.
Мой курсор (t_col_name) содержит список столбцов из моей таблицы.
--select count(*) from sh.costs where promo_id is null result:78425
DECLARE
null_count number;
t_col_name ALL_TAB_COLUMNS.COLUMN_NAME%type;
CURSOR c_column_name is
select COLUMN_NAME from ALL_TAB_COLUMNS where TABLE_NAME = 'COSTS';
BEGIN
dbms_output.put_line('Null Count');
OPEN c_column_name;
LOOP
FETCH c_column_name into t_col_name;
EXIT WHEN c_column_name%notfound;
select count(*) into v_count from sh.costs where t_col_name is
null;
dbms_output.put_line(t_col_name || ' '|| null_count);
END LOOP;
CLOSE c_column_name;
END;
Фактический результат:
Null count
PROD_ID 0
TIME_ID 0
PROMO_ID 0
CHANNEL_ID 0
UNIT_COST 0
UNIT_PRICE 0
Ожидаемый результат:
Null count
PROD_ID 0
TIME_ID 0
PROMO_ID 78425
CHANNEL_ID 0
UNIT_COST 0
UNIT_PRICE 0
Проблема связана с моим SQL-запросом:
select count(*) into v_count from sh.costs where t_col_name is null;
t_col_name передается в виде строки вместо имени столбца.
Когда я изменяю запрос на фактическое имя столбца, я получаю правильное количество для столбца, то есть:
select count(*) into v_count from sh.costs where promo_id is null;
Null count
PROD_ID 78425
TIME_ID 78425
PROMO_ID 78425
CHANNEL_ID 78425
UNIT_COST 78425
UNIT_PRICE 78425