oracle 12g无效数字错误

时间:2018-04-29 11:24:48

标签: sql oracle

create table WeeklySaleReport
( ReportID varchar(20) primary key
, StartDate date
, EndDate date
, SaleAmount number (8,2)
, ComRate number (8,2)
, ComAmount number (8,2)
, EmployeeID int
, EName varchar(70)
, BrandID varchar(20)
, BName varchar(70)
, BSaleAmount number(8,2)
, TypeID varchar(20)
, TName varchar(20)
, TSaleAmount number(8,2)
, ESaleAmount number(8,2)
, EBonus number(8,2)
, DepartmentID references Department(DepartmentID) );

此表已成功

但是在尝试插入这些字段时,它会给出错误“无效数字”:

insert into WeeklySaleReport
values
  ( 'R1', TO_DATE ('2018/06/16','yyyy/mm/dd')
  , TO_DATE ('2018/07/11','yyyy/mm/dd')
  , '9020.00', '2324.21', '20.00', 'E1'
  , 'Bassi', 'B1', 'Brand One', '123.00'
  , 'Type1', 'T One', '500.00', '123.00'
  , '555.00', 'D1' );

2 个答案:

答案 0 :(得分:3)

您已在表格中定义EmployeeID int,然后尝试将值'E1'插入该列。

答案 1 :(得分:2)

我强烈建议您更多地编写插件:

insert into WeeklySaleReport (ReportID, StartDate, EndDate, SaleAmount, ComRate, ComAmount,
                              EmployeeID, EName, BrandID, BName, BSaleAmount,
                              TypeID, TName, TSaleAmount, ESaleAmount, EBonus)
     values 'R1',                   -- ReportID
             DATE '2018-06-16',     -- StartDate
             DATE '2018-07-11',     -- EndDate
             9020.00,               -- SaleAmount
             2324.21,               -- ComRate
             20.00,                 -- ComAmount
             'E1'                   -- EmployeeId
    ---------^ ERROR
             'Bassi',               -- EName
             'B1',                  -- BrandId
             'Brand One',           -- BName
             123.00,                -- BSaleAmount
             'Type1',               -- TypeId
             'T One',               -- TName
             500.00,                -- TSaleAmount
             123.00,                -- ESaleAmount
             555.00,                -- Bonus
             'D1'                   -- DepartmentId
            );

注意:

  • 列出更新中的列。在这里,我还将它们添加为评论,以便您和其他人可以按照其中的内容进行操作。
  • EmployeeId显然是一个错误。
  • Oracle建议使用VARCHAR2()而不是VARCHAR()作为字符串。
  • 了解你的类型!不要在数字常量周围加上单引号。这是误导。
  • 使用DATE关键字。它是ANSI标准,更易于阅读。

我刚刚学到了一些东西。 DepartmentId声明 在Oracle中有效,即使它没有类型。 Here是一个SQL小提琴。大多数数据库都需要表中的类型定义。但是,我仍然不知道该值是否有效,因为问题中的类型不明确。