目前使用OCI访问数据库执行操作。发现一个问题:
需要执行DML语句的表如下:
表结构如下:
create table XT_APRV_ITEM
(
  APRV_ID      VARCHAR2(20) not null,
  OBJ_ID       VARCHAR2(20),
  ROLE_ID      VARCHAR2(20),
  APRV_EMP     VARCHAR2(20),
  APRV_TIME    DATE,
  APRV_FLAG    INTEGER,
  APRV_CONTENT VARCHAR2(200),
  CUR_FLAG     INTEGER
)OCI执行的语句为:strsql = "insert into xt_aprv_item values(11,11,'哈哈',1,sysdate,1,11,11)"rc = OCIStmtPrepare(p_sql, p_err, (text *)strsql, strlen(strsql), 
     OCI_NTV_SYNTAX,  OCI_DEFAULT);rc = OCIStmtExecute(p_svc, p_sql, p_err,  1,  0,
           (CONST OCISnapshot *) NULL, (OCISnapshot *) NULL, OCI_COMMIT_ON_SUCCESS);
此时就卡住,不返回结果在执行如下语句就可以正常插入:
strsql = "insert into xt_aprv_item values(22,11,22,1,sysdate,1,11,11)"请教 OCI大侠们造成卡住的原因是什么?如何解决?

解决方案 »

  1.   

    strsql = "insert into xt_aprv_item values(11,11,'哈哈',1,sysdate,1,11,11)"
    表字段的实际顺序不一定就是定义时的顺序,SQL语句改成:
    strsql = "insert into xt_aprv_item(APRV_ID,OBJ_ID,ROLE_ID,APRV_EMP,APRV_TIME,APRV_FLAG,APRV_CONTENT,CUR_FLAG) values(11,11,'哈哈',1,sysdate,1,11,11)"
      

  2.   

    应该不是这个问题,我后来把数据库重启了一下就能通过这个OCI程序插入了!难道是表被锁了 ,还是 其他什么原因?不明白
      

  3.   

    你可以直接使用insert语句调整一下顺序看一下
      

  4.   

    把两条语句在PL/SQL 或者sqlplus 中试验,
    都成功了就在自己的程序中测试!我经常就是按照这种方法去做的!效果很好!