文字列を返す関数を次のように宣言しました
function(varchar2) return varchar2;
この関数をカーソル内から呼び出すようにしたい
open p-cursor for select * from employee where emp_name = function(ssn).
しかし、それはいくつかのエラーをスローします。
カーソルで使用されているクエリは、個別に実行すると正常に機能しています。
文字列を返す関数を次のように宣言しました
function(varchar2) return varchar2;
この関数をカーソル内から呼び出すようにしたい
open p-cursor for select * from employee where emp_name = function(ssn).
しかし、それはいくつかのエラーをスローします。
カーソルで使用されているクエリは、個別に実行すると正常に機能しています。
関数を「宣言」したと言うとき、このような意味ですか?
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);
where句ではグループ関数を使用できないと確信しています。ただし、この関数 (ssn) はグループ関数ではないため、ここでも使用できません。
サブクエリとして使用でき、目的を果たします。
select * from employee where emp_name = (select package_name.function_name(ssn) from dual); の p-cursor を開きます。