如何在pl / sql中调用游标内的函数?

时间:2012-12-28 10:11:25

标签: plsql

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

function(varchar2) return varchar2;

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

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

但它会引发一些错误。

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

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

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

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

为员工选择* *打开p-cursor,其中emp_name =(从dual选择package_name.function_name(ssn));