2017-09-18 111 views
0

30日以上経過したデータを含むテーブルを切り捨てる文を作成しています。私は、SQL文を次のよう、それは次のと私の変換エラーを与えるとして今、私は私のPL/SQLブロックを構築に成功PL/SQL:数値または値のエラー:文字から数値への変換エラー

SELECT 
    * 
FROM 
    xyz --table name 
    where 
    trunc(date_loaded_timestamp)<= TRUNC(SYSDATE) - 30; 

実行使用し、30日より古いデータを参照してください。

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

どの部分がこのエラーをスローするか教えてください。 execute immediateを単純なステートメントに置き換えて、エラーが継続するかどうかを教えてください。 – sagi

+0

@sagiエラーで更新された質問PL/SQLブロックを実行しています – Auguster

+1

エラーを検出しました。クエリは '( 'truncate table' || c.table_name || 'trunc(' || c.column_name || ')<= TRUNC(SYSDATE) - 30') '。つまり、SQLと同じことをしたい場合です。しかしそれがエラーを解決するかどうかわからない。 – sagi

答えて

0

即時コードブロックを実行すると、以下のようになります。

execute immediate 'truncate table ' || c.table_name || ' where ' || trunc(c.column_name) || ' <= trunc(sysdate) - 30'; 
関連する問題