在 pl/sql 中通过变量使用函数名称
Using function name by variable in pl/sql
我正在编写 PL/SQL 代码,我的目的是用定义声明函数,然后将其分配给变量,然后使用该变量调用它。
declare
func varchar2(50);
function add(a NUMBER,b NUMBER)
return BOOLEAN is
c NUMBER;
begin
c := a+b;
dbms_output.put_line(c);
end add;
begin
func :='add'; or func :=add;
if (func(10,20)=false) then
dbms_output.put_line('false statement');
else
dbms_output.put_line('true statement');
end if;
end;
但这不起作用。所以我不知道如何将函数分配给变量。
您应该使用您需要的函数调用构建一个匿名块,然后使用 EXECUTE IMMEDIATE 调用它。你应该知道这个函数有多少个参数。
像这样:
DECLARE
func VARCHAR2(20);
value1 NUMBER := 10;
value2 NUMBER := 20;
plsql_block VARCHAR2(500);
out_value NUMBER;
BEGIN
func := 'add';
plsql_block := 'BEGIN :v := ' || func || '(:v1,:v2); END;';
EXECUTE IMMEDIATE plsql_block USING OUT out_value, IN value1, value2;
IF out_value > 0 THEN
dbms_output.put_line('TRUE statement');
ELSE
dbms_output.put_line('FALSE statement');
END IF;
END;
我正在编写 PL/SQL 代码,我的目的是用定义声明函数,然后将其分配给变量,然后使用该变量调用它。
declare
func varchar2(50);
function add(a NUMBER,b NUMBER)
return BOOLEAN is
c NUMBER;
begin
c := a+b;
dbms_output.put_line(c);
end add;
begin
func :='add'; or func :=add;
if (func(10,20)=false) then
dbms_output.put_line('false statement');
else
dbms_output.put_line('true statement');
end if;
end;
但这不起作用。所以我不知道如何将函数分配给变量。
您应该使用您需要的函数调用构建一个匿名块,然后使用 EXECUTE IMMEDIATE 调用它。你应该知道这个函数有多少个参数。
像这样:
DECLARE
func VARCHAR2(20);
value1 NUMBER := 10;
value2 NUMBER := 20;
plsql_block VARCHAR2(500);
out_value NUMBER;
BEGIN
func := 'add';
plsql_block := 'BEGIN :v := ' || func || '(:v1,:v2); END;';
EXECUTE IMMEDIATE plsql_block USING OUT out_value, IN value1, value2;
IF out_value > 0 THEN
dbms_output.put_line('TRUE statement');
ELSE
dbms_output.put_line('FALSE statement');
END IF;
END;