SELECT游标列表中需要别名以避免重复的列名称

时间:2014-05-06 18:46:51

标签: sql plsql

我在执行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不太好,所以我真的不知道如何确定问题。提前感谢您提供任何建议。

1 个答案:

答案 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