EXEC SQL UPDATE TABLE_A set sign_status=:in_op_status,sign_login_no=:in_login_no,sign_time=sysdate 
where login_accept=:in_login_accept;
EXEC SQL update TABLE_B set status=:in_op_status where login_accept=:in_login_accept;
in_login_accept 是一个long行变量,两个表中 login_accept 定义都是相同的,都是NUMBER(14)
直接在PLSQL中执行,执行都正确,TABLE_A中实际满足条件的记录3条,TABLE_B中有1条,TABLE_A无法更新,SQLCODE =0,TABLE_B却可以更新。后来我用sprintf(TmpSqlStr,"UPDATE TABLE_A set sign_status=\'%s\',sign_login_no=\'%s\',sign_time=sysdate \
where login_accept=\'%ld\'",in_op_status,in_login_no,in_login_accept);将这语句打印出来之后 PLSQL中执行也是正确的,用EXEC SQL EXECUTE
     BEGIN
EXECUTE IMMEDIATE :TmpSqlStr;
END;
END-EXEC;
程序中还是无法进行更新操作。SQLCODE =0。

解决方案 »

  1.   

    in_op_status,in_login_no 这两个变量我也看了 没有问题。
      

  2.   

    to hdhai9451 
    不是放在循环里面的,其他部分的代码和这没语句没有什么关系。
      

  3.   

    to hdhai9451 
    不是放在循环里面的,其他部分的代码和这没语句没有什么关系。
      

  4.   

    单独这样写:
    UPDATE TABLE_A set sign_status=:in_op_status,sign_login_no=:in_login_no,sign_time=sysdate 
    where login_accept=:in_login_accept;然后提交,有什么问题吗?
      

  5.   

    to: hdhai9451 
    正常情况下满足login_accept=:in_login_accept;条件的 sign_status等字段要更新,可实际上并没有更新,奇怪
      

  6.   

    把它变成三个句子行吗?
    UPDATE TABLE_A set sign_status=:in_op_    where login_accept=:in_login_accept;UPDATE TABLE_A set statussign_login_no=:in_login_no   where login_accept=:in_login_accept;UPDATE TABLE_A set sign_time=sysdate     where login_accept=:in_login_accept;
      

  7.   

    这个变量in_login_accept的值等于多少?
    比如等于100你可以这样验证一下它有没有数据?
    select * from TABLE_A where login_accept=100;
    有没有符合条件的记录?如果已经有,它不更新,说明你没有执行commit语句如果有记录,那就这样
    UPDATE TABLE_A set sign_status=:in_op_status,sign_login_no=:in_login_no,sign_time=sysdate 
    where login_accept=:in_login_accept; 
    commit;
      

  8.   

    值是2000012762005
    我在PLSQL下执行 SELECT COUNT(*)   FROM TABLE_A WHERE login_accept='2000012762005';
    返回的是3条语句
    如果在c文件中,
    EXEC SQL SELECT COUNT(*)  into :itemp FROM pBatchAddFee WHERE login_accept=:in_login_accept;
    itemp 是一个整型
    得到的是itemp =1  奇怪
    我有 commit 就是无法更新。
      

  9.   

    to vingocyc :
    拆开我也试了 不行。
      

  10.   

    TmpSqlStr = [UPDATE TABLE_A set sign_status='Y',sign_login_no='ba0001',sign_time=sysdate                   where login_accept='2000012762005']这是打印出来的SQL 语句,中括号就是我加的,
    PLSQL可以执行。前面pBatchAddFee  就是 TABLE_A。是我临时改的。
      

  11.   

    晕了,这个简单的UPDATE语句怎么会这种问题哟。按8楼的操作就应该可以的。
      

  12.   

    既然在PLSQL中执行没有问题,那么多半就不是sql的问题。建议你检查一下程序代码,比如看看是否是真的得到了一个可用的数据库链接等等。