ora-00907错误在哪里

时间:2018-04-23 17:17:17

标签: sql database oracle

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) 
);
因为一个小时的帮助,我一直在敲打这个问题

5 个答案:

答案 0 :(得分:3)

有关您的代码的一些评论。

  • 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)
);

答案 1 :(得分:1)

我认为有两个问题 -

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

答案 2 :(得分:1)

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

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

  • 数字(18,0),
  • 十进制(18,0),
  • SMALLINT,
  • 整数,
  • 实,
  • 浮,
  • BINARY_FLOAT,
  • BINARY_DOUBLE。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

您的数据类型毫无意义。 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) 
);