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。
不是放在循环里面的,其他部分的代码和这没语句没有什么关系。
不是放在循环里面的,其他部分的代码和这没语句没有什么关系。
UPDATE TABLE_A set sign_status=:in_op_status,sign_login_no=:in_login_no,sign_time=sysdate
where login_accept=:in_login_accept;然后提交,有什么问题吗?
正常情况下满足login_accept=:in_login_accept;条件的 sign_status等字段要更新,可实际上并没有更新,奇怪
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;
比如等于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;
我在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 就是无法更新。
拆开我也试了 不行。
PLSQL可以执行。前面pBatchAddFee 就是 TABLE_A。是我临时改的。