oracle表(worker)定义为:
workid number 10
workname varchar2 10存储过程(pwork)定义为
 (
pworkid     in  worker.workid%type,
pworkname   in  worker.workname%type
)
as
begin
insert into worker(workid,workname) values(pworkid,pworkname);
end;我写了一个程序如下:
int main()
{
DBHANDLE *pDBHandle;
SQLUINTEGER PartID;
SQLCHAR PartName[10];
SQLINTEGER PartIDInd=0, PartNameInd=0;
SQLRETURN ret=0;

连接数据库等程序(略)

if(SQL_SUCCESS != SQLBindParameter(pDBHandle->hSTMT, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &PartID, 0, &PartIDInd))
printf("Error: SQLBindParameter.\n");
if(SQL_SUCCESS != SQLBindParameter(pDBHandle->hSTMT, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 10, 0, PartName, 0, &PartNameInd))
printf("Error: SQLBindParameter.\n");
PartID=1024;
strcpy(PartName, "ABC");

if(mDBSuccess != SQLExecDirect(pDBHandle->hSTMT, "{call pwork(?,?)}", SQL_NTS))
{
printf("ERROR.\n");
return -1;
}
return 0;
}现在的问题是:
查询后如下:
10:55:25 10:55:25 
    WORKID WORKNAME
---------- ----------
      1024已选择 1 行。即WORKNAME的数据"ABC"为什么没有存到数据库里面,我查了好久,不知道?希望知道的能指点一下!

解决方案 »

  1.   

    事务有没有提交
    存储过程(pwork)定义为
     (
    pworkid     in  worker.workid%type,
    pworkname   in  worker.workname%type
    )
    as
    begin
    insert into worker(workid,workname) values(pworkid,pworkname);
    ----
    commit;
    end;试试
      

  2.   

    WORKNAME的数据"ABC"为什么没有存到数据库里面,
    你commit没有,没有的话,是不会提交到数据库的
      

  3.   

    我把存储过程改为下面的,还是不行呀
     (
    pworkid     in  worker.workid%type,
    pworkname   in  worker.workname%type
    )
    as
    begin
    insert into worker(workid,workname) values(pworkid,pworkname);
    commit;
    end;另外,我在sqlplus中直接输入下面的语句就可以存储,不管有没有commit语句
    begin
    pwork(123,'abc');
    end;所以我感觉是我的程序有问题!
      

  4.   

    你是利用oci开发的
    问题在于你打开你的事务时,使用的是要求显示提交的。所以,你必须调用事务提交的函数才行。或者在创建连接时,使用可以自动提交的函数。
    在sqlplus中,你表面是看到了,如果你退出sqlplus后在进入,你就看不到你插入的数据了。那是因为你看的是你自己插入的(或者未退出,在打开一个sqlplus,你看不到你插入的数据)脏数据而已。