Sat*_*esh 1 sql oracle plsql dynamic plsqldeveloper
我正在创建一个这样的查询:
v_sql:=' SELECT abc FROM '||v_table||'
WHERE area IN ('''||v_area||''')
AND (
('''||p_supp_nbr||''' IS NULL)
OR
supplr_vn IN ('''||p_supp_nbr||''')
)
Run Code Online (Sandbox Code Playgroud)
现在,当p_supp_nbr是NULL那么它不是索取.
我是这样的:
((''IS NULL) OR (supplr_vn =''))
它在桌子上的检查空间
但我希望((NULL IS NULL) OR (supplr_vn =NULL))条件无效
不要那样做!您冒着SQL注入问题的风险.使用绑定变量:
v_sql:= 'SELECT abc FROM '||v_table||
' WHERE area = :v_area
AND (
:p_supp_nbr IS NULL
OR
supplr_vn = :p_supp_nbr
)
Run Code Online (Sandbox Code Playgroud)
当然,既然您知道在生成动态SQL时该值是否为null,您可以改为:
v_sql:= 'SELECT abc FROM '||v_table||'
WHERE area = :v_area';
IF p_supp_nbr IS NULL THEN
v_sql := v_sql || ' AND :p_supp_nbr IS NULL';
ELSE
v_sql := v_sql || ' AND supplr_vn = :p_supp_nbr';
END IF;
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,您都可以在运行时绑定值,如下所示:
OPEN my_refcursor FOR v_sql USING v_area, p_supp_nbr;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |