【发布时间】:2018-06-01 15:11:53
【问题描述】:
我有这样的功能:
create or replace function params
(
p_pr varchar2,
p_qu_id varchar2,
p_date date := sysdate,
p_param varchar2 := null
)
return varchar2
as
...
sql_stmt varchar2(4000);
rc sys_refcursor;
...
BEGIN
sql_stmt := 'select parameter_name, parameter_value from ' || p_pr | '.v_view where query_id = ''' || p_qu_id || '''';
IF p_param IS NOT NULL
THEN
sql_stmt := sql_stmt || ' and parameter_value=''' || p_param || '''';
END IF;
OPEN rc FOR sql_stmt;
LOOP
FETCH rc
INTO v_param_name, v_param_value;
EXIT WHEN rc%NOTFOUND;
EXIT WHEN v_param_value is NULL;
....
DBA 说这个函数使用硬解析,我必须在这个函数中使用绑定变量。我该怎么做?
谢谢。
【问题讨论】:
-
您在这里缺少管道:
... from ' || p_pr |。您将无法将 p_pr 变量绑定到查询中,因为它是表名的一部分,但您可以使用 dbms_assert 来确保它符合有效标识符名称的条件。不过,您可以绑定 parameter_value 并打开传入 p_param 值的游标。 See here 的示例说明如何做到这一点。
标签: oracle plsql bind-variables