2
我有像签名一堆功能:如何使用EXECUTE IMMEDIATE获取记录?
FUNCTION func1 (par1 IN VARCHAR2, par2 IN NUMBER) RETURN my_rec;
,我有用于从该组函数检索数据的功能:
FUNCTION get_result (func_name IN VARCHAR2, par1 IN VARCHAR2, par2 IN NUMBER) RETURN my_rec;
IS
rec1 my_rec;
BEGIN
EXECUTE IMMEDIATE 'SELECT ' || func_name || '(:par1, :par2) FROM DUAL'
INTO rec1
USING IN par1, IN par2;
RETURN rec1;
END;
但是这个代码失败,ORA-01007“的变量不在选择列表中“。
我该如何重写语句?
那你的意思是:拼接价值动态SQL字符串的变量,而不是使用'USING'子句? – engro 2009-05-21 09:08:57
是的。我承认这是一个安全漏洞,只是在par1和par2不是“安全”字符串的情况下。 – ATorras 2009-05-21 11:19:06