Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在Oracle中执行此存储函数时出错_Sql_Oracle_Function - Fatal编程技术网

Sql 在Oracle中执行此存储函数时出错

Sql 在Oracle中执行此存储函数时出错,sql,oracle,function,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

我的存储函数需要输入,并应返回至少获得两个奖项的成员数

这是我的密码

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

与存储过程不同,不能使用exec执行函数。请尝试以下操作:

SELECT calculateaward('P0001') FROM DUAL;

另外,为什么在返回数字时将函数定义为返回VARCHAR2?这不是错误,因为数字将自动转换为VARCHAR2,但最好返回由returns定义的相同数据类型。与存储过程不同,您不能使用exec执行函数。请尝试以下方法:

SELECT calculateaward('P0001') FROM DUAL;

另外,为什么在返回数字时将函数定义为返回VARCHAR2,这不是错误,因为数字将自动转换为VARCHAR2,但最好返回返回函数返回内容定义的相同数据类型:这就是它们与过程的区别。因此,当我们执行它们时,我们需要为返回值提供一个容器:

在SQL*中,加上

SQL>   var whatever varchar2(30)
SQL>   exec :whatever := calculateaward('P0001')

顺便说一下,当您的函数执行一个查询,其结果是一个计数时,返回值的数据类型应该是NUMBER,而不是VARCHAR2

函数返回东西:这就是它们与过程的区别。因此,当我们执行它们时,我们需要为返回值提供一个容器:

在SQL*中,加上

SQL>   var whatever varchar2(30)
SQL>   exec :whatever := calculateaward('P0001')

顺便说一下,当您的函数执行一个查询,其结果是一个计数时,返回值的数据类型应该是NUMBER,而不是VARCHAR2

定义“不工作”。什么是预期的行为,什么是观察到的行为?你得到的错误是什么?由于未提供DDL和数据,提供错误代码/消息有助于解决问题…定义“不起作用”。预期的行为和观察到的行为是什么?您得到的错误是什么?由于未提供DDL和数据,提供错误代码/消息有助于解决问题…实际上我们可以执行函数。@APC:您能提供示例吗?实际上我们可以执行函数。@APC:您能提供示例吗?