PL / SQL:数字或值错误:字符到数字转换错误

时间:2017-09-18 14:54:05

标签: sql oracle plsql relational-database oracle12c

我正在构建一个语句来截断我的一组表,其中包含超过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无效?

1 个答案:

答案 0 :(得分:0)

执行立即代码块可以如下所示。

execute immediate 'truncate table ' || c.table_name || ' where ' || trunc(c.column_name) || ' <= trunc(sysdate) - 30';