我有一张由列中的匿名块组成的表rule
,需要从过程中执行。
这是看起来像真实场景的示例数据。
桌子emp
:
create table emp (id int,name varchar2(20));
数据:
insert into emp values(1,'Jack');
insert into emp values(2,'John');
insert into emp values(3,'Jams');
桌子ano
:
create table ano(id int,rule varchar2(4000));
数据:
insert into ano values(1,'declare v_cnt number;
begin
select count(1) into v_cnt from emp where id = :1;
if(v_cnt>1) then :2 := ''true'';
else :2 := ''false'';
end if;
end;');
程序:
create procedure pr_ano(p_emp emp)
IS
DECLARE v_out boolean;
BEGIN
execute immediate p_emp.rule using 1,v_out;
dbms_output.put_line(v_out);
END;
过程调用:
pr_ano(emp);
收到错误Unkown Command
;
这是一个坏主意,因为你的数据库容易受到 SQL 注入攻击。
如果您要使用此功能(不要),则不要让用户提供
ano
表中的规则,并确保所有规则都经过仔细清理,以免产生恶意。你想要类似这样的东西:
然后是程序:
然后你可以使用以下命令调用它:
输出:
小提琴