我在执行plsql命令时遇到问题。想法是显示快递,位置,是否超过20。
DECLARE
yesnobool VARCHAR(3);
CURSOR orders_list IS
SELECT shipping.ship_courier,
shipping.weightpership,
shipping.shipping#,
purchaseorder.shipping#,
storelocation.location#,
STORELOCATION.LOC_CITY,
purchaseorder.location#
FROM shipping,
purchaseorder,
storelocation
WHERE purchaseorder.shipping# = shipping.shipping#
and storelocation.location# = purchaseorder.location#;
BEGIN
dbms_output.Put_line('Courier || Location || Too Heavy for 1 person lift?');
dbms_output.Put_line('------ -------- -----------------------------------');
FOR an_order IN orders_list LOOP
IF SHIPPING.WEIGHTPERSHIP > 20 THEN
yesnobool := 'YES';
ELSE
yesnobool := 'NO';
END IF;
dbms_output.Put_line(Rpad(an_order.ship_courier, 6) || ' ' ||
Rpad(an_order.loc_city, 8) || ' ' ||
Rpad(yesnobool, 19));
END LOOP;
END;
我得到的错误信息是:
错误报告 - ORA-06550:第21行,第2栏: PLS-00402:游标的SELECT列表中需要别名以避免重复的列名称 ORA-06550:第21行,第2栏: PL / SQL:语句被忽略 06550. 00000 - "行%s,列%s:\ n%s" *原因:通常是PL / SQL编译错误。 *操作:
我对plsql不太好,所以我真的不知道如何确定问题。提前感谢您提供任何建议。
答案 0 :(得分:2)
列shipping#
和location#
在您的选择字段列表中重复。
shipping.shipping#
purchaseorder.shipping#
storelocation.location#,
purchaseorder.location#
光标无法区分应该使用的运输或位置。
解决方案是为字段添加别名。像这样:
shipping.shipping# as shipping,
purchaseorder.shipping# as poshipping
和
storelocation.location# as storeLocation,
purchaseorder.location# as poLocation