【发布时间】:2014-04-04 16:57:58
【问题描述】:
我有一个配置表,如果 record_tm 超过某个可配置时间 (config_recordtrim_hrs),我想删除一行。换句话说,变量 recordtrim_config 来自另一个表,其中有人写入了一个值(例如 24 表示 24 小时),之后将删除一条记录。
DECLARE
recordtrim_flag configs_table.value%type;
recordtrim_config configs_table.value%type;
recordtrim_interval interval;
BEGIN
SELECT configs_table.value INTO recordtrim_flag FROM configs_table WHERE configs_table.name = 'enable_recordtrim';
SELECT configs_table.value INTO recordtrim_config FROM configs_table WHERE configs_table.name = 'config_recordtrim_hrs';
SELECT CAST (recordtrim_config AS interval) INTO recordtrim_interval;
IF (recordtrim_flag = 'T') THEN
DELETE FROM main_records WHERE record_tm + recordtrim_interval < current_timestamp;
END IF;
END;
此代码在我尝试将 recordtrim_config 强制转换为间隔的行处引发错误。我该如何解决这个问题?
编辑:我的错误:
错误报告:ORA-06550:第 8 行,第 40 列:PL/SQL:ORA-30089:缺失 或无效的 ORA-06550:第 8 行,第 1 列:PL/SQL:SQL 语句被忽略
编辑 2:新代码:
DECLARE
recordtrim_flag configs_table.value%type;
recordtrim_config configs_table.value%type;
recordtrim_interval interval;
BEGIN
SELECT configs_table.value INTO recordtrim_flag FROM configs_table WHERE configs_table.name = 'enable_recordtrim';
SELECT configs_table.value INTO recordtrim_config FROM configs_table WHERE configs_table.name = 'config_recordtrim_hrs';
recordtrim_interval := NUMTODSINTERVAL (recordtrim_config, 'HOUR');
IF (recordtrim_flag = 'T') THEN
DELETE FROM main_records WHERE record_tm + recordtrim_interval < current_timestamp;
END IF;
END;
第 11 行出现新错误,recordtrim_interval 是无效标识符
【问题讨论】: