1

我已经声明了一个返回一些字符串的函数

function(varchar2) return varchar2;

我希望从游标内部调用此函数,例如

open p-cursor for select * from employee where emp_name = function(ssn).

但它会引发一些错误。

游标中使用的查询在单独执行时工作正常。

4

2 回答 2

1

当你说你已经“声明”了一个函数时,你的意思是这样的吗?

declare
  function f (p varchar2) return varchar2
  is
  begin
    ...
  end;
begin
  open p_cursor for select * from employee where emp_name = function(ssn);
  ...
end;

您不能在 SQL 中使用类似的函数。您必须在数据库中创建该函数,以便它可以在 PL/SQL 程序之外使用 - 例如:

  create or replace function f (p varchar2) return varchar2
  is
  begin
    ...
  end;

或者,如果您正在创建一个包,那么您可以像这样公开打包的函数:

  create or replace package pkg is
    function f (p varchar2) return varchar2;
    ...
  end;

然后它可以在其他代码中使用,如下所示:

  open p_cursor for select * from employee where emp_name = pkg.f(ssn);
于 2012-12-28T10:19:40.413 回答
0

我很确定您不能在 where 子句中使用组函数。但是这个函数(ssn)不是一个组函数,也不能在这里使用。

您可以将其用作子查询,达到目的。

open p-cursor for select * from employee where emp_name = (select package_name.function_name(ssn) from dual);

于 2012-12-29T00:16:29.647 回答