2014-02-07 3 views
0

나는 이것이 완전히 멍청한 질문이라는 것을 인정하기 위해 당혹 스럽다. 그러나 나는 T-SQL 세계에서 왔다는 사실을 피할 수 없으며 이것은 나를위한 완전히 새로운 영토이다.PL/SQL select가 두 줄 이상을 반환 함

이것은이 계약자 및 프로젝트 ID를 가지고 수를 반환해야 내 PL의 SQL 기능 만

ContractorID ProjectID이

1    100  1000 
2    100  800 
3    200  1005 
4    300  2000 

원가 내가 4 개 레코드가 간단한 테이블입니다 시간 (10이 경우)

create or replace FUNCTION GetCost(contractor_ID IN NUMBER, 
              project_ID in NUMBER) 
    RETURN NUMBER 
IS 
    ContractorCost NUMBER;  

BEGIN 
    Select Cost INTO ContractorCost 
    from Contractor_Project_Table 
    where ContractorID= contractor_ID and ProjectID =project_ID ; 
    return ContractorCost; 
END; 

그러나

select GetCost(1,100) from Contractor_Project_Table; 

사용이 동일한 행을 반환 4 회 여기 뭐가 문제

 
1000 
1000 
1000 
1000 

? 왜 4 행 대신

1 @a_horse_with_no_name가 지적 하듯이

+1

'Contractor_Project_Table'의 각 행 **에 대해'getCost()'가 ** ** 한 번 호출되므로 해당 테이블에있는 행 수만큼 얻을 수 있습니다. 정규 결합 만 사용하면 그 함수를 사용하는 것보다 훨씬 효율적입니다. –

답변

2

에서 선택합니다. 이 조회를 사용하여 하나의 레코드를 확보하십시오.

select GetCost(1,100) from dual; 
+0

고마워요 ...이게 효과적 이군요. 듀얼을 넣어 줘야한다는이 컨셉이 다소 느껴지 긴했지만 ... 음, 오라클은 그렇습니다. –

3

주셔서 감사의를이 반환 문제는 4 행 그래서 아무 WHEREContractor_Project_Table에 대한 어떠한 SELECT 항상 4를 반환합니다 Contractor_Project_Table은 (아마도) 가지고 있다는 것입니다 행. 함수는 테이블의 각 행에 대해 4 번 호출됩니다. 당신이 매개 변수의 단일 세트로 함수를 호출 한 행의 데이터를 반환하려면

, 당신은 아마 당신이 Contractor_Project_Table 테이블에 4 개 행이 있기 때문에 dual 테이블

SELECT GetCost(1, 100) 
    FROM dual