【问题标题】:Column ambiguously defined in Oracle PL-SQL [duplicate]Oracle PL-SQL 中定义不明确的列 [重复]
【发布时间】:2012-01-21 01:02:55
【问题描述】:

我正在尝试在不同的表中选择多行,但无论我做什么我都无法让它工作。 我收到此错误:

Error(14,1): PL/SQL: ORA-00918: column ambiguously defined

代码(注意,这是触发器的一部分,这就是为什么会有:new):

SELECT brw.borage, bt.agelower, bt.ageupper
INTO borAge, minAge, maxAge
FROM Borrower brw, BookTitle bt
  INNER JOIN BookCopy bc ON  :new.bcID = bc.bcID
  INNER JOIN BookTitle bt ON bt.isbn = bc.isbn

注意:BookTitle 只有一个 ageLower 和 ageUpper 列。除了 borAge、minAge 和 maxAge 之外,也没有 declerations。

【问题讨论】:

  • 你在做什么INTO?,你想选择结果还是将它们插入表格?
  • @Lamak borAge, minAge, maxAge 是probably variables

标签: sql oracle sqlplus


【解决方案1】:

问题是你有两次相同的别名,试试这个:

SELECT brw.borage, bt.agelower, bt.ageupper
INTO borAge, minAge, maxAge
FROM Borrower brw, BookTitle bt
  INNER JOIN BookCopy bc ON  :new.bcID = bc.bcID
  INNER JOIN BookTitle bt2 ON bt2.isbn = bc.isbn

但这会给您带来比预期更多的结果,因为您将 BookTitle 表放在 FROM 部分。


我认为只有这可能才是你真正需要的:

SELECT brw.borage, bt.agelower, bt.ageupper
INTO borAge, minAge, maxAge
FROM Borrower brw
  INNER JOIN BookCopy bc ON  :new.bcID = bc.bcID
  INNER JOIN BookTitle bt ON bt.isbn = bc.isbn

【讨论】:

  • borAge、minAge 和 maxAge 是变量。你的代码编译好了,现在只需要测试触发器:)
【解决方案2】:

您定义 BookTitle bt 两次。

【讨论】:

  • 与 bt.ageLower, bookTitle.ageupper 相同。我在实验时将其改回 bookTitle.ageLower :/
  • 抱歉,我不清楚:在您的第二个 INNER JOIN 中,bt 是指在 WHERE 子句中定义的那个,还是在那个 JOIN 中定义的那个?更改其中一个的名称,并使用您所指的那个名称。
  • 嗯,我把最后一行改成了INNER JOIN bt ON bt.isbn = bc.isbn;,上面写着Table or view does not exist.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
  • 1970-01-01
相关资源
最近更新 更多