我目前正在学习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;
答案 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;