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) はグループ関数ではないため、ここでも使用できません。

サブクエリとして使用でき、目的を果たします。

select * from employee where emp_name = (select package_name.function_name(ssn) from dual); の p-cursor を開きます。

于 2012-12-29T00:16:29.647 に答える