Oracle-在SELECT语句中使用变量

皇家Swish

我在SQL方面的背景是SQL Server,所以请原谅我以与Oracle类似的方式使用Oracle。我需要使用一个变量,以便可以使用存储在其中的值来执行单独的SELECT查询。我的目标是找到一个百分比值,该变量将保存表的总值。

DECLARE
  v_Count INT;

BEGIN

--get total rows
SELECT COUNT(OrderID)
INTO v_Count
FROM OrderedEquipment;

--find percentage of equipment ordered
SELECT a.Equip_Name, COUNT(b.EquipmentID), ((COUNT(b.EquipmentID)*1.0)/(v_Count*1.0)*100)
FROM Equipment a
LEFT OUTER JOIN OrderedEquipment b ON a.EquipmentID = b.EquipmentID
GROUP BY a.Equip_Name;

END;

然后,SQL Developer将引发以下错误:

Error report -
ORA-06550: line 10, column 1:
PLS-00428: an INTO clause is expected in this SELECT statement

我试图寻找解决方案,偶然发现了这篇文章:

如何在Oracle SQL Developer中使用变量?

但是,没有一个答案能真正解决我的问题。我尝试使用bind变量示例,但是没有用。

思考长臂猿

最简单的方法是根本不使用变量

SELECT a.Equip_Name, COUNT(b.EquipmentID), 
    (COUNT(b.EquipmentID)*1.0)/((SELECT COUNT(OrderID) cnt FROM OrderedEquipment)*1.0)*100
  FROM Equipment a
  LEFT OUTER JOIN OrderedEquipment b ON a.EquipmentID = b.EquipmentID
  GROUP BY a.Equip_Name;

您也可以在块中将数据选择为3个变量

... a.Equip_Name into v1, COUNT(b.EquipmentID) into v2,
  ((COUNT(b.EquipmentID)*1.0)/(v_Count*1.0)*100) into v3 ...

并列出他们

dbms_output.put_line(v1||' '||v2||' '||v3);

编辑-此查询应该更快:

with counter as (select count(OrderID) cnt from OrderedEquipment)
select a.Equip_Name, count(b.EquipmentID), 
    (count(b.EquipmentID)*1.0)/(max(counter.cnt)*1.0)*100
  from Equipment a
    left join OrderedEquipment b ON a.EquipmentID = b.EquipmentID
    cross join counter
  group by a.Equip_Name;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章