【问题标题】:ora-00907 where is the errorora-00907 错误在哪里
【发布时间】:2018-04-24 11:14:21
【问题描述】:
create table salary_details 
(
emp_id number(2) , 
travel_allowance long(10000),
housing_allowance long (100000),
PF long(100000), 
account_no long(10000), 
Total_sal long(100000) 
);

一个小时以来一直在努力解决这个问题,请帮忙

【问题讨论】:

  • 您希望long(10000) 代表什么?
  • 这看起来一点也不像 create table 语句——你想做什么?
  • 创建一个表来表示员工管理数据库项目中员工的工资详细信息
  • 有效的数据类型记录得相当彻底in the documentation
  • 我喜欢它。表中只有 100 个员工 ID,但他们的薪水高达 10^10,000(太长,无法放入评论)。

标签: sql database oracle


【解决方案1】:

一些关于你的代码的 cmets。

  • Oracle 通过number 类型处理数字。您可以使用其他类型,但最好还是坚持使用number
  • 您可以为number 提供比例和精度。对于大多数货币金额,类似 (12, 4) 就足够了。
  • 工资会随着时间而变化,因此我希望表格中包含时间部分。
  • number(2) 代表 0-99 之间的数字。这似乎不是一个很大的范围。

所以,我可能会建议:

create table salary_details (
    emp_id number , 
    travel_allowance number(12, 4),
    housing_allowance number(12, 4),
    PF number(12, 4),   -- if this is a monetary amount
    account_no number, 
    Total_sal number(12, 4)
);

【讨论】:

    【解决方案2】:

    我认为有两个问题 -

    1. 没有什么叫做 long(xxxx)。正确的语法应该是 LONG 列。
    2. oracle 表只能有 1 列作为 LONG 类型。请参阅较早的帖子之一 - why oracle allows only one LONG column per table?

    【讨论】:

    • 无论如何,您都不应该在新表中使用 LONG 列;并且 OP 几乎可以肯定根本不需要字符串类型。
    【解决方案3】:

    long 不是数字 Oracle 数据类型。它是一个(过时的)类型,类似于 varchar

    也许您可以使用以下方法之一:

    • 数字(18,0),
    • 十进制(18,0),
    • smallint,
    • 整数,
    • 真实的,
    • 浮动,
    • binary_float,
    • binary_double。

    【讨论】:

      【解决方案4】:

      您的数据类型没有意义。 Number(2) 不适用于员工 ID - 在不损失整数精度的情况下,它的最大值是 99。LONG 是 Oracle 中基于字符的数据类型,不适用于数值。我还会为 PF 列选择一个更好的名称,因为该列代表什么并不明显。

      这里有一个更合适的数据类型的建议:

      create table salary_details 
      (
      emp_id INTEGER , 
      travel_allowance DECIMAL(10,2),
      housing_allowance long DECIMAL(10,2),
      PF DECIMAL(10,2),   
      account_no INTEGER, 
      Total_sal DECIMAL(10,2) 
      );
      

      【讨论】:

        【解决方案5】:

        数据类型 LONG ,最大大小:2 GB - 1。每个表只允许一个 LONG 列。 所以你每张表只能使用一个 LONG 列...... Refer this

        【讨论】:

        • 无论如何,您都不应该在新表中使用 LONG 列;并且 OP 几乎可以肯定根本不需要字符串类型。
        猜你喜欢
        • 2020-11-21
        • 1970-01-01
        • 2016-07-07
        • 2015-05-15
        • 2013-05-12
        • 2013-07-18
        • 2014-03-25
        • 1970-01-01
        • 2018-05-22
        相关资源
        最近更新 更多