SELECT游标列表中需要别名,以避免函数中出现重复的列名

问题描述 投票:0回答:2

我有以下功能:

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查询中使用了表的别名。哪里可以问题?

sql oracle plsql
2个回答
1
投票

它似乎

szczegoly_ofertyoferty都有至少一个共同的列。

为了避免歧义,你必须使用别名来单独表达列名,使用别名szofe,如SELECT sz.col1, ofe.col1, ofe.col2中的SELECT list


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
)
. . .

?是您填写表别名。

© www.soinside.com 2019 - 2024. All rights reserved.