【问题标题】:ORA-00900: invalid SQL statementORA-00900: 无效的 SQL 语句
【发布时间】:2011-07-17 18:03:20
【问题描述】:
CREATE TABLE Customers(
  CustID number(5,0),
  EmpID CHAR(1),
  Cust_Name varchar(20) not null,
  Cust_Address varchar(20) not null,
  Cust_City varchar(20) not null,
  Cust_State char(2) not null,
  Cust_Zipcode number(5,0) not null,
  Ship_Date date not null,
  Order_Date date not null,
  constraint ci_fk FOREIGN KEY (EmpID) references EMPLOYEES(EmpID),
  constraint ci_ck check (Ship_Date>Order_Date)
)

有什么问题?

【问题讨论】:

    标签: sql oracle ora-00900


    【解决方案1】:

    Employees 表不存在。

    或 EmpId 不是主键。

    完成这些操作后,我的 create 语句副本就起作用了。

    【讨论】:

    • 确实如此。 desc employees Object Type TABLE Object EMPLOYEES Table Column Data Type Length Precision Scale Primary Key Nullable Default Comment EMPLOYEES EMPID Char 1 - - 1 - - - LASTNAME Varchar2 10 - - - nullable - - FIRSTNAME Varchar2 10 - - - nullable - - ADDRESS Varchar2 10 - - - nullable - - ADDRESS1 Varchar2 10 - - - nullable - - CITY Char 10 - - - nullable - - STATE Char 2 - - - nullable - - ZIPCODE Char 5 - - - nullable - - 1 - 8
    • 如果我创建表Employees但empId不是主键,我会得到:ORA-02270: no matching unique key or primary key for this column-list State:S1000,Native:2270,来源:[Oracle][ODBC][Ora] 你遇到什么错误?
    • 主键,见表说明。
    • 我刚刚又试了一次,它成功了。也许数据没有更新或什么的。
    • 和 Daniel 一样,我在创建表格时没有遇到任何问题。奇怪的是,您会收到 ORA-00900 错误,因为我认为这与程序密切相关。
    【解决方案2】:

    验证Employees表是否存在。

    验证员工表中的 EmpID 列与客户表中的数据类型是否相同。

    验证雇员表中的 EmpID 列是雇员表的主键。

    【讨论】:

      【解决方案3】:

      克里斯说过。

      将 CHAR 更改为 VARCHAR2,因为不应使用 CHAR。另外,number(5,0) 与 NUMBER(5) 相同,所以你可以使用它。

      【讨论】:

      • 对于最大的列。 1 个字符的长度,CHAR(1) 非常好。当知道状态总是正好是 2 个字符时,那么使用 CHAR(2) 也没有任何问题。
      • “CHAR 永远不应该被使用”是请求限定语句的一个很好的例子。 :P
      • 同意client09。 CHAR 对 VARCHAR2 没有任何好处。在某些情况下它并不比 VARCHAR2 差,但为什么会增加复杂性。
      猜你喜欢
      • 2010-12-29
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 2017-05-12
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多