PL / SQL select返回多行

时间:2014-02-07 07:11:21

标签: oracle plsql plsqldeveloper

我很尴尬地承认这是一个完全没有问题的问题 - 但我躲避我来自T-SQL世界的事实,这对我来说是一个全新的领域

这是一张我只有4条记录的简单表格

ContractorID ProjectID费用

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

这是我的PL SQL函数,它应该包含承包商和项目ID并返回小时数(在这种情况下为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

谢谢你

2 个答案:

答案 0 :(得分:3)

正如@a_horse_with_no_name指出的那样,问题是Contractor_Project_Table(大概)有4行,因此对SELECT Contractor_Project_Table没有WHERE子句的任何dual将始终返回4行。你的函数被调用了4次,表中的每一行都有一次。

如果要使用一组参数调用函数并返回单行数据,则可能需要从SELECT GetCost( 1, 100 ) FROM dual 表中选择

{{1}}

答案 1 :(得分:2)

因为Contractor_Project_Table表中有4行。使用此查询获取一条记录。

select GetCost(1,100) from dual;