SQL에 대한 저의 배경은 SQL Server이므로 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] 삭제
몇 마디 만하겠습니다