Oracle sqldeveloper 未找到父项,但存在oracle DB

Oracle sqldeveloper 未找到父项,但存在oracle DB,oracle-sqldeveloper,Oracle Sqldeveloper,在开始处理错误消息之前,我想为我的供应商和产品表显示一个简单的左连接查询: select p.id as ProductId, p.vendorid as VendorFk, v.id as VendorPk from Vendors v left join products p on v.id = p.vendorid; 我运行了一个类似的插入到下面的一个成功的五倍之前,你可以看到上面的图像。第六次尝试似乎失败了。我真的不知道为什么。我是甲骨文的新手

在开始处理错误消息之前,我想为我的供应商和产品表显示一个简单的左连接查询:

select p.id as ProductId, p.vendorid as VendorFk, v.id as VendorPk
    from Vendors v
        left join products p
        on v.id = p.vendorid;

我运行了一个类似的插入到下面的一个成功的五倍之前,你可以看到上面的图像。第六次尝试似乎失败了。我真的不知道为什么。我是甲骨文的新手,我从来没有遇到过MS SQL server这样的问题。任何帮助都将不胜感激。我还使用了Oracle SQL Developer

-“错误报告- ORA-02291:违反完整性约束(SYSTEM.FK_VENDORS_ID)-未找到父密钥“

  • 您有两个表:产品和供应商
  • PRODUCTS有一个名为VENDORID的列,它是指向VENDORS.ID的外键
  • 引用完整性意味着供应商必须包含您试图插入到PRODUCTS表中的ID。否则,完整性将被破坏,Oracle将引发错误
  • 在您的示例中,ID=2似乎不存在于VENDORS表中,尽管图(第5行)显示了不同的结果
举个简单的例子:

SQL> create table vendors (id number primary key);

Table created.

SQL> create table products (id number primary key,
  2                         vendorid number constraint fk_pv references vendors);

Table created.

SQL> insert into vendors values (1);

1 row created.

SQL> -- this will be OK as vendors.id = 1 exists
SQL> insert into products values (100, 1);

1 row created.

SQL> -- this will fail as vendors.id = 2 doesn't exist
SQL> insert into products values (200, 2);
insert into products values (200, 2)
*
ERROR at line 1:
ORA-02291: integrity constraint (SCOTT.FK_PV) violated - parent key not found


SQL>
那么,会出什么问题呢?如果其他人使用该模式,他们可能已从供应商表中删除了ID=2。这样做没有问题,只要您不将插入提交到您已经制作的产品中(插入到供应商中的内容应该已经提交,否则其他用户将不得不等待锁被释放)

还有一件事:错误消息说您正在使用系统模式。不要这样做-SYS和SYSTEM是特殊的,它们拥有数据库。如果您无意中做了一些错误和意外的事情,您可能会破坏数据库。创建另一个用户(或者使用现有用户中的一个,如HR或SCOTT,如果它们预先安装在您拥有的数据库版本中),并在那里测试您的技能

SQL> create table vendors (id number primary key);

Table created.

SQL> create table products (id number primary key,
  2                         vendorid number constraint fk_pv references vendors);

Table created.

SQL> insert into vendors values (1);

1 row created.

SQL> -- this will be OK as vendors.id = 1 exists
SQL> insert into products values (100, 1);

1 row created.

SQL> -- this will fail as vendors.id = 2 doesn't exist
SQL> insert into products values (200, 2);
insert into products values (200, 2)
*
ERROR at line 1:
ORA-02291: integrity constraint (SCOTT.FK_PV) violated - parent key not found


SQL>