我在Oracle中执行此存储函数时收到错误

时间:2011-06-02 14:50:46

标签: sql oracle function

我的存储功能需要输入,并且应该返回已赢得至少两个奖项的成员数量......

这是我的代码;

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')但它不起作用,请帮助。

2 个答案:

答案 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的数据类型。