В принципе, нужно отказаться от старых разделов (ов) в таблице Oracle, в настоящее время возникают проблемы с функцией SUBSTR.Извлечение части даты из строки
Код:
DECLARE
l_sql_stmt VARCHAR2(1000);
l_date DATE;
BEGIN
FOR x IN (SELECT *
FROM user_tab_partitions
WHERE table_name = 'TABLE_NAME')
LOOP
l_date := to_date(substr(x.high_value, 11, 19), 'YYYYMMDD');
IF(l_date < add_months(trunc(sysdate), -15))
THEN
l_sql_stmt := 'ALTER TABLE TABLE_NAME' || ' DROP PARTITION ' || x.partition_name;
dbms_output.put_line(l_sql_stmt);
EXECUTE IMMEDIATE l_sql_stmt;
END IF;
END LOOP;
END;
дата присутствует в колонке "high_value". Например, один из разделов High_value = TO_DATE(' 1950-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
Мне нужна дата, которая будет храниться в переменной «l_date», поэтому ее можно использовать для дальнейших вычислений.
Ошибка:
ORA-01843: не действительный месяц
ORA-06512: в строке 9
01843.00000 - "не действительный месяц"
Какие у вас проблемы? Выполняется ли это, и если да, то в чем разница между результатами и ожидаемым? – DaaaahWhoosh
Вы получаете «ORA-01830: конец формата даты заканчивается перед преобразованием всей строки ввода»? Аргумент substr и форматная модель выглядят неправильно для раздела даты; какие сырые высокие ценности вы ожидаете? –