我很尴尬地承认这是一个完全没有问题的问题 - 但我躲避我来自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
谢谢你
答案 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;