目前使用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大侠们造成卡住的原因是什么?如何解决?
需要执行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大侠们造成卡住的原因是什么?如何解决?
表字段的实际顺序不一定就是定义时的顺序,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)"
都成功了就在自己的程序中测试!我经常就是按照这种方法去做的!效果很好!