用oracle写了个过程。 
如下: 
create or replace procedure proc_updateGeography1 
is 
 cursor mycursor is select * from PEC_ZONES_ZIP_CODE; 
 theRow mycursor%rowType; 
 strWhere varchar2(40); 
begin 
 for theRow in mycursor loop  
  update company set GEOGRAPHY = theRow.pec_zones_id where zip ike  '% ' ¦ ¦theRow.zip_code  ¦ ¦  '% '; 
 end loop; 
end; 
    
  存储过程中有一个变量 theRow.zip_code  
  我想用它来作为查询条件,写在like后面,    
  我在网上查了好多资料,有的说就现在这个方式就可以, 
   有的说可以在之前先把%号拼装到变量里 如:strWhere := chr(39)  ¦ ¦ theRow.zip_code  ¦ ¦  '% '  ¦ ¦ chr(39); 
  然后写在like后面也可以了,如:..... like strWhere ..... 
  这两种方式我都试过了,执行正常结束,可是一条都没有更新!! 
 开始我还以为是表里的数据没有匹配的呢!!然后我就特意加了两条测试数据,最终没有被更新!!! 
 我都愁死了,已经三天了,一直没有找到好的办法解决!! 
这是什么原因啊1????各位老大?????小弟先谢了!! 

解决方案 »

  1.   

    如果没有commit,最多只是最后一条没有被更新吧!!!
    当第二条更新时会自动提交上一条的信息!
      

  2.   

    "如果没有commit,最多只是最后一条没有被更新吧!!!
    当第二条更新时会自动提交上一条的信息!"
    这个理解是错误的!!
    你在end loop; 后面加上 commit; 试试。
      

  3.   

    我原来就是这么写的!!更新了一万多条,
    不同的地方是之前没有用到like,
    ,现在用到like,想再重新更新一遍!
      

  4.   

    谢谢两位!!我犯了个这么低级的错误!!
    不过奇怪的是,我之前没有写 commit也更新了一万多条呢!
    郁闷,
    咳!!!!总之是搞定了!!我很高兴,谢谢
      

  5.   

    加上commit,调试一下cursor的theRow.zip_code值是否正确,
    这些都没问题的话,条件再换成  where instr(zip,theRow.zip_code)>0;