显式游标的问题

时间:2018-03-02 01:25:31

标签: sql loops plsql cursor

我目前正在学习PL / SQL课程并学习有关显式游标的知识。我正在进行任务,现在遇到以下问题。

'在此作业中,使用显式光标显示下表。如果VENDOR表的V_ORDER中有“Y”,则从VENDOR表中打印出供应商的名称,然后是文本'供应产品:'然后是PRODUCT表中提供的项目说明。'

我开发了以下块...

[光标块] [1]

并得到以下错误...(这是使用oracle apex) [错误消息] [2]

我在等待教授的回复,但他可能会很慢(在线课程)。任何意见都将非常感谢!

更新了阻止......

DECLARE
CURSOR cur_vendor IS
SELECT v.v_order, p.p_descript
FROM vendor v INNER JOIN product p
USING (v_code)
WHERE v.v_order = 'Y';
TYPE type_vendor IS RECORD(
name vendor.v_name%TYPE,
descript product.p_descript%TYPE);
rec_vendor type_vendor;
BEGIN
OPEN cur_vendor;
LOOP
FETCH cur_vendor INTO rec_vendor;
EXIT WHEN cur_vendor%NOTFOUND;
END LOOP;
CLOSE cur_vendor;
DBMS_OUTPUT.PUT_LINE(rec_vendor.name || ' supplies the product ' || 
rec_vendor.descript);
END;

2 个答案:

答案 0 :(得分:0)

错误非常具体,您使用保留字“desc”作为列名。将列名更改为非保留字,或在每次使用时将其括在双引号中。

答案 1 :(得分:0)

解决!

DECLARE
CURSOR cur_vendor IS
SELECT v.v_order, v.v_name, p.p_descript FROM product p 
natural JOIN vendor 
v;
TYPE type_vendor IS RECORD(
v_order vendor.v_order%TYPE,
v_name vendor.v_name%TYPE,
descript product.p_descript%TYPE);
rec_vendor type_vendor;
BEGIN 
OPEN cur_vendor;
LOOP
FETCH cur_vendor INTO rec_vendor;
EXIT WHEN cur_vendor%NOTFOUND;
IF rec_vendor.v_order = 'Y' THEN
DBMS_OUTPUT.PUT_LINE(rec_vendor.v_name||' supplies the product ' || 
rec_vendor.descript);
END IF;
END LOOP;
CLOSE cur_vendor;
END;