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

Sql 游标的选择列表中需要别名,以避免函数中出现重复的列名,sql,oracle,plsql,Sql,Oracle,Plsql,我有以下功能: 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

我有以下功能:

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;
我在select查询中使用了表的别名。问题出在哪里?

看来

两个表szczegoly_of erty和oferty至少有一个共同点 专栏


为避免歧义,您必须使用别名分别表示列名,别名为sz和ofe,如选择列表中的SELECT sz.col1、ofe.col1、ofe.col2。

仅选择需要的列。并学习使用正确的显式联接语法:


那个?是供您填写表格别名的。

旁注:OP使用的是过时的前ANSI-92联接语法,应该替换为现代语法。@TimBiegeleisen当然你是对的,我也意识到了这一点。顺便说一句,异常处理程序没有任何用处,实际上只会模糊行号和错误消息。删除整个异常部分将显著改进错误处理。问题出在哪里?“选择列表”是介于“选择”和“从”之间的列列表。它告诉你在那里使用一些别名。
Alias required in SELECT list of cursor to avoid duplicate column names.
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
)
. . .