我的存储功能需要输入,并且应该返回已赢得至少两个奖项的成员数量......
这是我的代码;
CREATE OR REPLACE FUNCTION calculateaward
(
i_PLAYERID VARCHAR2
) RETURN VARCHAR2 AS
cnt NUMBER;
BEGIN
SELECT * INTO cnt FROM
(
SELECT COUNT(*) AS NOM FROM
(
SELECT PLAYERID, USERNAME FROM MEMBER R
WHERE R.USERNAME IN
(
SELECT USERNAME FROM
(
SELECT USERNAME, COUNT(*) AS cnt FROM MEMBERAWARD
GROUP BY USERNAME
)
WHERE cnt >= 2
)
)
WHERE player= I_PLAYERID
GROUP BY PLAYERID
);
RETURN cnt;
END calculateaward;
我正在尝试执行以下功能 exec calculateaward('P0001')但它不起作用,请帮助。
答案 0 :(得分:3)
你不能使用exec执行一个与存储过程不同的函数。不要试试这个:
SELECT calculateaward('P0001') FROM DUAL;
另外,为什么在返回NUMBER时将函数定义为返回VARCHAR2,这不是错误,因为该数字将自动转换为VARCHAR2,但总是更好地返回返回
答案 1 :(得分:2)
函数返回东西:这就是它们与程序的区别。因此,当我们执行它们时,我们需要为返回值提供容器:
在SQL * Plus中将是
SQL> var whatever varchar2(30)
SQL> exec :whatever := calculateaward('P0001')
顺便说一下,当你的函数执行一个其结果为COUNT的查询时,返回的值应该具有NUMBER而不是VARCHAR2的数据类型。