我必须根据4个输入变量在存储过程中动态准备更新语句。
假设取test
,test1
,test2
和test3
为输入参数。
然后我必须准备查询,请帮我构建一下:
update emp
set empid='1'
where test = test
and test1 = test1
and test2 = test2
and test3 = test3
假设test和test1值为null且test2和test3值不为null,那么我可以像下面那样准备更新语句
update emp
set empid='1'
where test is null
and test1 is null
and test2 = test2
and test3 = test3
答案 0 :(得分:2)
如果更改了您在过程中传递的一个或多个参数将是NULL
,您可以按如下方式编写UPDATE
语句。实际上不需要使用动态SQL。在此示例中,过程的参数以p_
:
update emp
set empid='1'
where (test = p_test or (test is null and p_test is null))
and (test1 = p_test1 or (test1 is null and p_test1 is null))
and (test2 = p_test2 or (test2 is null and p_test2 is null))
and (test3 = p_test3 or (test3 is null and p_test3 is null))
答案 1 :(得分:0)
根据输入参数创建SQL语句
喜欢
'SELECT '||'Colum_nmae from table' || where var1=var2 .....
然后使用execute immediate执行此查询
答案 2 :(得分:0)
您不能为变量指定与列相同的名称,这会让PL / SQL感到困惑。我们将变量命名为v_test
,v_test1
,...
你可以写:
update emp
set empid='1'
where (test = v_test OR v_test is null)
and (test1 = v_test1 OR v_test1 is null)
and ...
或者更简单地使用NVL:
update emp
set empid='1'
where test = nvl(v_test, test)
and test1 = nvl(v_test1, test1)
and ...
NVL(A, B)
为A
,除非A
为空,在这种情况下为B
。