遇到“ PLS-00302:必须声明组件'QUANTITY'”,尽管表中声明了“ quantity”列

问题描述

我试图遍历游标以获取一些值,而我的方法类似于this answer代码如下:

SET SERVEROUTPUT ON;

DECLARE
    sold_phone_id Sale.phone_id%TYPE;
    sold_count number;

BEGIN
    FOR row IN (
                SELECT Sale.phone_id,SUM(Sale.quantity)
                FROM Sale
                GROUP BY Sale.phone_id
            )
    LOOP
        sold_phone_id := row.phone_id;
        sold_count := row.quantity;
        DBMS_OUTPUT.PUT_LINE(sold_phone_id || ' ' || sold_count);
    END LOOP;


END;
/ 

但是,我遇到以下错误

 sold_count := row.quantity;
                                  *
ERROR at line 13:
ORA-06550: line 13,column 21:
PLS-00302: component 'QUANTITY' must be declared
ORA-06550: line 13,column 3:
PL/sql: Statement ignored

我已通过以下方式声明了Sale表:

CREATE TABLE Sale(
    id number,phone_id number,quantity number,sale_date date,seller_id number,PRIMARY KEY(id),FOREIGN KEY(seller_id) REFERENCES Seller(id)
);

解决方法

您的子查询不返回此列。为sum()使用别名:

BEGIN
    FOR row IN (
                SELECT phone_id,SUM(quantity) as quantity   --> here
                FROM Sale
                GROUP BY Sale.phone_id
            )
    LOOP
        sold_phone_id := row.phone_id;
        sold_count := row.quantity;
        DBMS_OUTPUT.PUT_LINE(sold_phone_id || ' ' || sold_count);
    END LOOP;
END;
/
,

在循环查询中使用以下代码部分: 适度的SUM(销售量)

然后在第15行使用 row.TEMPVARIABLE 而不是 row.quantity