PL/SQL:使用编译错误创建的函数 [关闭]

Posted

技术标签:

【中文标题】PL/SQL:使用编译错误创建的函数 [关闭]【英文标题】:PL/SQL: Function Created with compilation Error [closed] 【发布时间】:2014-09-25 18:24:09 【问题描述】:

我正在尝试找出为什么会出现编译错误

CREATE OR REPLACE FUNCTION Get_balance_due
(order_id_f NUMBER)
RETURN NUMBER
AS 
balance_due_f NUMBER;
BEGIN
SELECT SUM(total_amount) INTO balance_due_f 
FROM order_lines, orders
WHERE order_id_f = order_line.order_id;
RETURN balance_due_f;
End;

错误是

LINE/COL  ERROR  
7/1  PL/SQL: SQL Statement ignored  
9/20  PL/SQL: ORA-00918: column ambiguously defined 

我尝试做一个常规的选择查询,它成功了

SELECT SUM(total_amount)
FROM order_lines, orders
WHERE order_lines.order_id = orders.order_id and orders.order_id = 12

该函数应该对所需的 order_id 进行金额求和并将其返回...

错误信息是:函数创建时出现编译错误

【问题讨论】:

@NicholasKrasnov 谢谢,还是一样的错误信息 您在balance_due_f NUMBER 末尾缺少一个分号。 @BobJarvis 谢谢,出现新错误 您正在使用表order_linesorders,但在WHERE 子句中您尝试与order_line.order_id 进行比较。那么表名为order_lines 还是order_line 是的,明白了 :) 谢谢它现在的工作 【参考方案1】:

每当您收到此错误时,请尝试完全限定您使用的列。

试试TABLENAME.order_id_f = order_line.order_id,而不是order_id_f = order_line.order_id

见:http://www.dba-oracle.com/t_ora_00918_column_ambiguously_defined.htm

【讨论】:

以上是关于PL/SQL:使用编译错误创建的函数 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 PL/Sql 函数编译错误

PL/SQL: SQL 语句被忽略 - 创建一个过程得到编译错误

在 Oracle 11g2 XE 中编译 PL/SQL 函数有时会导致 ORA-00600:内部错误

声明变量的 PL/SQL 编译错误

过程创建时出现编译错误 PL/SQL: ORA-00947: not enough values

编译过程时 PL/SQL 工具包 Web 应用程序错误