根据输入参数动态准备更新语句

时间:2013-09-11 16:39:01

标签: sql oracle

我必须根据4个输入变量在存储过程中动态准备更新语句。

假设取testtest1test2test3为输入参数。

然后我必须准备查询,请帮我构建一下:

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

3 个答案:

答案 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_testv_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