所以我现在已经对这段代码感到头疼了一段时间,我无法弄清楚为什么我的代码不会让我这么做。
这是在我的创建声明中:
create table account ( number int not null generated always as identity (start with 1000, increment by 1, no cache),
id int not null,
balance int not null check (balance >=0),
type char (1) not null check (type in ('C', 'S')),
status char (1) not null check (status in ('A', 'I')),
primary key (number));
这就是我的sqc文件中的内容。
printf ("Please enter your ID: ");
scanf("%d", &vid);
printf ("Please enter your Account type (C for checking or S for Saving): ");
scanf("%s", &vtype);
printf ("Please enter your initial balance: ");
scanf("%d", &vbalance);
exec sql insert into account (id, balance, type, status)
values (:vid, :vbalance, :vtype, 'A');
exec sql declare accountid cursor for
select number
from account
group by number order by number desc fetch first 1 rows only;
exec sql open accountid;
exec sql fetch accountid into :vnumber;
exec sql close accountid;
printf("Your new account ID: %d", vnumber);
由于某种原因,它总是返回0,而不是1000:
Please enter your ID: 100
Please enter your Account type (C for checking or S for Saving): C
Please enter your initial balance: 100
Your new account ID: 0
之后我还检查了该表,看它是否为空,就好像命令从未经过或拒绝插入命令一样。
编辑:所以我认为我的主要问题是试图插入我的'状态','A'。我试图将它放入变量并将该变量发送到表中,但它将该变量返回为null。由于我的表不需要空值,因此它拒绝了它,因此没有创建事务。
我手动插入带有测试值的P2.Account并且它工作正常,输出正确的值。所以任何人都可以指导我一个可以帮助我在插入中输入'A'而不改为null的源代码吗?这可能是我唯一的问题。
答案 0 :(得分:0)
在数据库中启动事务时,可以选择回滚(撤消)更改或提交(保存)更改。此功能有多种原因。第一种是在插入多条记录时遇到错误;回滚将撤消所有内容,以便您可以修复错误并重新启动插入。
在插入后,您似乎错过了语句:
EXEC SQL COMMIT;
我对Oracle和Pro-C更熟悉,但IBM在DB2站点上有一个很好的小教程: