目前系统的要求就是必须要用存储过程执行update语句
所以我把update tableName set (SETVALUE) where (CONDITION)中的SETVALUE和CONDITION拼好了,发给存储过程拼接SQL并执行 PROCEDURE UPDATETABLE(
V_ERR OUT NUMBER,
v_cursor OUT t_cursor,
SETVALUES IN VARCHAR2,
CONDITIONS IN VARCHAR2
) IS 
cSQL   VARCHAR2(8000); /*SQLセット用*/

  BEGIN
V_ERR   := 0;
cSQL  := ' UPDATE BOHT0011 SET ';
cSQL  := cSQL || SETVALUES;
cSQL := cSQL || ' WHERE ';
cSQL := cSQL || CONDITIONS; EXCEPTION
WHEN OTHERS THEN
V_ERR := SQLCODE;
  END UPDATETABLE;但是调用之后发现表没有更新,为啥?拼接的SQL没有问题

解决方案 »

  1.   

    execute immeidate cSQL   ;
    commit
    exception ................ 你只是组织了语句,没有执行。
      

  2.   

    没看见执行SQL的语句啊
    execute immedite cSQL;
    commit;
      

  3.   

    可以执行了,但是报911错误
    sql语句
    UPDATE BOHT0011 SET  SHOHIN_CD1='95001400500000',  SU=115 , UPD_YMD=20080513, UPD_TM=144945000 WHERE  TORIHIKI_KBN='021' AND KAKUCHO_TORIHIKI_KBN='1' AND HHT_ID='1001' AND HHT_INPUT_NO='10' AND HHT_DATA_REN_NBR='55' AND SOSIN_TM='121314' AND SOSIN_YMD='20080507' AND UPD_YMD=20080513 AND UPD_TM=135242047 ;但是粘贴出来之后单独执行却正确,这是咋回事呢
      

  4.   

    没事了,诸位,谢谢,貌似我自己在SQL后加了个分号...跑通后即可结贴