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_lines
和orders
,但在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: SQL 语句被忽略 - 创建一个过程得到编译错误
在 Oracle 11g2 XE 中编译 PL/SQL 函数有时会导致 ORA-00600:内部错误