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"为什么没有存到数据库里面,我查了好久,不知道?希望知道的能指点一下!
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"为什么没有存到数据库里面,我查了好久,不知道?希望知道的能指点一下!
解决方案 »
- SQL语句VARCHAR2()类型转化为NUMBER类型
- 如何写过滤数据SQL语句
- oracl客户端登陆老提示无监听服务
- 往oracle9.2插入数据时发生ora-000600 16622错误,请问怎么解决?
- 关于一条复杂的统计SQL
- 请教一个PL/SQL Developer使用的问题?
- 原来sql server后改为oracle 8I,已有数据内容如何移啊
- 日期处理
- 请问为什么我安装oracle时总是装不上OraOledb.oracle这个oracle自己的ODBC驱动呢
- 存储过程中能否用order by?
- 查询数据 用时间作过滤条件 条件写的不对 怎么纠正阿
- 我用的是 PLSQL 怎样在检索出来的数据选择一条呢?
存储过程(pwork)定义为
(
pworkid in worker.workid%type,
pworkname in worker.workname%type
)
as
begin
insert into worker(workid,workname) values(pworkid,pworkname);
----
commit;
end;试试
你commit没有,没有的话,是不会提交到数据库的
(
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;所以我感觉是我的程序有问题!
问题在于你打开你的事务时,使用的是要求显示提交的。所以,你必须调用事务提交的函数才行。或者在创建连接时,使用可以自动提交的函数。
在sqlplus中,你表面是看到了,如果你退出sqlplus后在进入,你就看不到你插入的数据了。那是因为你看的是你自己插入的(或者未退出,在打开一个sqlplus,你看不到你插入的数据)脏数据而已。