为什么我收到“无效号码”错误?

时间:2018-02-20 18:42:16

标签: sql oracle plsql

所以,我在这一张桌子上创建了两个触发器。 (加载)。 LOAD表包含以下列:

create or replace trigger xml_load_trigger
before insert on load
for each row
begin
  :new.row_id := row_id_increase.nextval;
END;
/

我正在尝试将数据插入到具有以下列的(VALUE)表中:

create or replace trigger xml_load_trigger_value_930
AFTER INSERT
on load
FOR EACH ROW
BEGIN
INSERT INTO VALUE
(value_id, product_id, data_source_id, unit_cd, value_tx, utc_offset, data_Date, hr_utc, hr, hr_num, data_code, create_Dt, create_user_id, modify_dt, modify_user_id, effective_dt, inactive_dt)
values('3', 'Mwh', null, null, :NEW.PostedValue, :NEW.UTCOffset, :NEW.Data_Date, :NEW.Data_Type, :NEW.UTCValue, :NEW.Hour, :NEW.data_code, null, null, null, null, null, null);
end;
/

我创建了以下触发器:  1)触发自动填充LOAD表的row_id:

insert into load (utcOffset, data_date, data_type, postedvalue, utcvalue, hour, data_code)
values(3, '1082019', 'UTC0', '2019-04-19 5:00', '19-APR-19 05.00.00.000000000 AM', 2, 'SYS');

2) *触发器将数据从LOAD表插入VALUE表。 **注意:**其中一些值是硬编码的,仅用于测试目的。

=averageifs(daily!b:b, daily!a:a, "<="&c1, daily!a:a, ">="&eomonth(c1, -1)+1)

两个触发器都编译;但是,当我尝试将一些数据加载到'LOAD'(登台)表时,我收到以下错误: SQL错误:ORA-01722:无效数字

这些是我试图插入“LOAD”(登台)表

的值
self.customInfoWindow = CustomInfoWindow().loadView()
self.mapView.delegate = self

为什么我收到此错误?我已经尝试切换我的插入值以确保它们符合我的表的设定标准,但我似乎无法确定发生了什么......或者这是错误的方法和/或是否有更好的方法这样做?

提前致谢!

1 个答案:

答案 0 :(得分:2)

如果你仔细查看你的insert语句,并重新格式化它,以便更清楚哪些值与哪些列匹配:

INSERT INTO VALUE
(value_id, energy_product_id, data_source_id, unit_cd,
  value_tx, utc_offset, data_Date, hr_utc,
  hr, hr_num, data_code, create_Dt,
  create_user_id, modify_dt, modify_user_id, effective_dt,
  inactive_dt)
values('3', 'Mwh', null, null,
  :NEW.PostedValue, :NEW.UTCOffset, :NEW.Data_Date, :NEW.Data_Type,
  :NEW.UTCValue, :NEW.Hour, :NEW.data_code, null,
  null, null, null, null,
  null);

所以你将value_tx设置为:NEW.PostedValue,我认为这是正确的,尽管名称是字符串; utc_offset:NEW.UTCOffsetdata_Date:NEW.Data_Datehr_utc:NEW.Data_Type听起来很奇怪,hr:NEW.Hourhr_num:NEW.data_codedata_code为空...

坚持下去,最后两个至少看错了。您当然应该将data_code设置为:NEW.data_code

您为data_code插入的值为'SYS',而hr_num是一个数字 - 因此您收到的错误,该字符串无法进入数字栏。

其他一些列看起来很狡猾,但可能只是名称不一致。但这种映射绝对是错误的。

正如Matt Gibson指出的那样,尝试将字符串'Mwh'放入数字Product_Id(或energy_product_id!)列将会出现同样的错误。

您需要注意(a)将正确的值插入正确的列; (b)使用正确的数据类型。您的某些列数据类型选择看起来很奇怪,例如data_date听起来应该是DATE,但您有Varchar2(7) - 即使将日期存储为字符串(a坏主意!)这很奇怪; '1082019'之类的值可能代表的实际日期并不明显。