现在plsql中,有一个变量有三种状态,并且每一个状态都会更新同一张表。
但是每次的更新字段不同。该如何用一个sql语句来完成?
STRSQL = 'UPDATE '
STRSQL = STRSQL  'UPDATE TABLE'
STRSQL = STRSQL  'SET '
if 状态1 then
STRSQL = STRSQL  状态1= 状态1'
end if
if 状态2 then
STRSQL = STRSQL  状态2= 状态2'
end if
if 状态3 then
STRSQL = STRSQL  状态3= 状态3'
end if
是像这样拼接吗?拼接好之后,该如何执行STRSQL 这个字符串呢?

解决方案 »

  1.   

    declare
      li_num number(1);
    begin 
      if li_num =1 then 
        update emp set job ='';
      else if li_num=2 then   
        update emp set mgr='';
      else if li_num = 3 then 
        update emp set sal =100;
      end if ;
        end if ;
     end if ;
    end ;
      

  2.   

    declare
      li_num number(1);
      ls_sql varchar2(2000);
    begin 
      if li_num =1 then 
        ls_sql=' update emp set job =''1''' ;
      else if li_num=2 then   
      ls_sql=' update emp set  ename =''1''' ;
      else if li_num = 3 then 
          ls_sql=' update emp set sal=1 ' ;
      end if ;
        end if ;
     end if ;
     execute immediate ls_sql ;
    end ; 
      

  3.   


    这样不就等于要写三遍update?
    上面举得例子里,只有一个字段,其实实际中有好几个字段呢!
    只能这样?
      

  4.   

    lz是这个意思吧?
    declare
      li_num number(1);
      ls_sql varchar2(2000);
    begin 
      ls_sql := 'update emp ';
      if 1 = 1 then 
        ls_sql:= ls_sql || ' set job =''1'' ' ;
      end if;
      if 2 = 2 then   
        ls_sql:=ls_sql || '  ename =''1'' ' ;
      end if;    
      if 3 = 3 then 
          ls_sql:=ls_sql || '  set sal=1 ' ;
      end if ;
     execute immediate ls_sql ;
    end ;