我正在构建一个语句来截断我的一组表,其中包含超过30天的数据。要查看超过30天的数据,我使用以下sql语句并成功执行
SELECT
*
FROM
xyz --table name
where
trunc(date_loaded_timestamp)<= TRUNC(SYSDATE) - 30;
现在我按如下方式构建我的PL / SQL块并给出转换错误。
BEGIN
FOR c IN(
select b.table_name,b.column_name from all_tab_columns b where b.table_name like 'STG_%' and column_name ='DATE_LOADED_TIMESTAMP') LOOP
EXECUTE IMMEDIATE ('truncate table ' || c.table_name || ' where ' || trunc(c.column_name) || '<= TRUNC(SYSDATE) - 30');
END LOOP;
END;
运行此块后,我收到错误
Error report -
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 4
06502. 00000 - "PL/SQL: numeric or value error%s"
我很困惑,因为我将字符转换为数字。我没有使用任何TO_NUMBER
和我用来选择数据的语句,为什么PL / SQL无效?
答案 0 :(得分:0)
执行立即代码块可以如下所示。
execute immediate 'truncate table ' || c.table_name || ' where ' || trunc(c.column_name) || ' <= trunc(sysdate) - 30';