VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 980|回复: 4

Oracle ODBC开发问题?

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-3-3 07:00:01 | 显示全部楼层 |阅读模式
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"为什么没有存到数据库里面,我查了好久,不知道?希望知道的能指点一下!
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-5-14 16:45:01 | 显示全部楼层
事务有没有提交
存储过程(pwork)定义为
(
pworkid     in  worker.workid%type,
pworkname   in  worker.workname%type
)
as
begin
insert into worker(workid,workname) values(pworkid,pworkname);
----
commit;
end;

试试
回复

使用道具 举报

0

主题

71

帖子

50.00

积分

新手上路

Rank: 1

积分
50.00
发表于 2020-5-14 23:30:02 | 显示全部楼层
WORKNAME的数据"ABC"为什么没有存到数据库里面,


你commit没有,没有的话,是不会提交到数据库的
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-5-15 23:30:01 | 显示全部楼层
我把存储过程改为下面的,还是不行呀
(
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;

所以我感觉是我的程序有问题!

回复

使用道具 举报

0

主题

6

帖子

6.00

积分

新手上路

Rank: 1

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表