我有以下功能:
CREATE OR REPLACE Function FindOffers
( przebieg_max IN number )
RETURN offer_type_table
AS
l_offers offer_type_table := offer_type_table();
BEGIN
FOR i IN (
SELECT * FROM szczegoly_oferty sz, oferty ofe
WHERE sz.przebieg <= przebieg_max AND sz.oferta_id = ofe.idk
)
LOOP
l_offers.EXTEND;
l_offers(l_offers.COUNT) := (offer_type('Auto',i.rok_produkcji,i.cena_aktualna,i.przebieg));
END LOOP;
RETURN l_offers;
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
END;
在编译期间,它向我显示以下错误:
Alias required in SELECT list of cursor to avoid duplicate column names.
我在select查询中使用了表的别名。问题出在哪里?
答案 0 :(得分:1)
似乎
表格
szczegoly_oferty
和oferty
至少有一个共同点 列。
为了避免歧义,您必须使用别名来单独表达列名称sz
和ofe
SELECT sz.col1, ofe.col1, ofe.col2
中的SELECT list
。
答案 1 :(得分:0)
仅选择所需的列。 和学会使用正确的,明确的JOIN
语法:
FOR i IN (
SELECT ?.rok_produkcji, ?.cena_aktualna, sz.przebieg
FROM szczegoly_oferty sz JOIN
oferty ofe
ON sz.przebieg <= przebieg_max AND sz.oferta_id = ofe.idk
)
. . .
?
用于填写表别名。