2012-01-31 3 views
0

두 개의 쿼리를 작성했습니다.oracle plsql 함수에 매개 변수 전달

질의 1 :

select stock_id from_id, 
     nvl(lead(stock_id, 1, null) over (order by stock_date),stock_id) to_id 
    from STOCK 
where stock_time not like 'NEW_STOCK'; 

위의 쿼리 반환

는 아래와 같이 결과 :

:

FROM_ID TO_ID 
331  341 
341  351 
351  361 
361  371 
371  391 
391  401 
401  421 
421  441 
441  451 
451  461 
461  321 
321  323 
323  491 
491  501 
501  501 

내 두 번째 쿼리는 다음과 같은

select max(m.material_thikness) || 
     ' mm' || ' | ' || 
     m.material_guage || 
     ' g' guage,  
     sum(util.find_usage_from_stock(MATERIAL_THIKNESS,P_FROM_ID,P_TO_ID)) - 
     sum(util.find_sheets_sold(MATERIAL_THIKNESS,P_FROM_ID,P_TO_ID)) diff 
    from material m 
where m.active like 'Y' 
group by m.material_guage 
order by m.material_guage; 

위의 쿼리 결과를 반환이다

GUAGE   DIFF 
6 mm | 11 g  0 
4 mm | 12 g  -0.32 
3 mm | 13 g  0.51 
2 mm | 14 g  0.85 
1.5 mm | 16 g -0.41 
1.2 mm | 18 g 0.35 
1 mm | 19 g  1.67 
.8 mm | 20 g 0 

두 번째 쿼리에서 첫 번째 쿼리의 첫 번째 쿼리에서 FROM_IDTO_ID 반환을 추가해야하고 두 번째 쿼리를 수정해야 아래와 같은 결과를 얻을 수 있습니다.

RANGE  DIFF 
331-341 0 
341-351 0.35 
351-361 0.45 
....... 
441-451 1.25 
451-461 -0.75 
461-321 1.67 

어떻게하면됩니까? 그것을 할

select max(m.material_thikness) || 
     ' mm' || ' | ' || 
     m.material_guage || 
     ' g' guage,  
     sum(util.find_usage_from_stock(MATERIAL_THIKNESS,P_FROM_ID,P_TO_ID)) - 
     sum(util.find_sheets_sold(MATERIAL_THIKNESS,P_FROM_ID,P_TO_ID)) diff 
    from material m 
where m.active like 'Y' 
    and (m.p_from_id,m.p_to_id) in(select stock_id from_id, 
             nvl(lead(stock_id, 1, null) 
              over (order by stock_date),stock_id) to_id 
            from STOCK 
            where stock_time not like 'NEW_STOCK') 
group by m.material_guage 
order by m.material_guage; 

윌 :

+1

모든 MATERIAL_THIKNESS는 의 모든 쌍 실행해야합니까? –

답변

1

그런 다음 모든 p_id 간격마다 material_thikness 값을 얻고 싶다면 :

select s.from_id || '-' ||s.to_id range, 
     sum(util.find_usage_from_stock(MATERIAL_THIKNESS,s.from_id,s.to_id)) - 
     sum(util.find_sheets_sold(MATERIAL_THIKNESS,s.from_id,s.to_id)) diff 
    from material m, (select stock_id from_id, 
             lead(stock_id, 1, stock_id) 
              over (order by stock_date) to_id 
            from STOCK 
            where stock_time not like 'NEW_STOCK') s 
where m.active like 'Y' 
group by s.from_id,s.to_id 
order by s.from_id; 
+0

A.B.Cade, 정말 고마워. 이것은 내가 필요로하는 질문입니다. – Bishan

0

당신은 이런 식으로 뭔가를 찾고 계십니까?